diff --git a/api/client.go b/api/client.go
index 4f1647b4cbf1152d38043406b7c511134b43d044..42fa1e69e25a22ad5c9fe7d1efd12a8625c96d15 100644
--- a/api/client.go
+++ b/api/client.go
@@ -30,6 +30,7 @@ import (
 )
 
 type Client struct {
+	storage globals.Storage
 	sess user.Session
 	comm io.Communications
 	quitReceptionRunner chan bool
@@ -50,19 +51,30 @@ func FormatTextMessage(message string) []byte {
 	return wireRepresentation
 }
 
-// Initializes the client by registering a storage mechanism.
-// If none is provided, the system defaults to using OS file access
+// Creates a new Client using the storage mechanism provided.
+// If none is provided, a default storage using OS file access
+// is created
 // returns a new Client object, and an error if it fails
-func InitClient(s globals.Storage, loc string) (*Client, error) {
-	storageErr := globals.InitStorage(s, loc)
+func NewClient(s globals.Storage, loc string) (*Client, error) {
+	var store globals.Storage
+	if s == nil {
+		globals.Log.WARN.Printf("No storage provided," +
+			" initializing Client with default storage")
+		store = &globals.DefaultStorage{}
+	} else {
+		store = s
+	}
+
+	err := store.SetLocation(loc)
 
-	if storageErr != nil {
-		storageErr = errors.New(
-			"could not init client storage: " + storageErr.Error())
-		return nil, storageErr
+	if err != nil {
+		err = errors.New("Invalid Local Storage Location: " + err.Error())
+		globals.Log.ERROR.Printf(err.Error())
+		return nil, err
 	}
 
 	cl := new(Client)
+	cl.storage = store
 	cl.comm = io.NewMessenger()
 	cl.listeners = switchboard.NewSwitchboard()
 	return cl, nil
@@ -113,7 +125,8 @@ func (cl *Client) Register(registrationCode string, gwAddr string,
 		nk[i] = *nodekeys
 	}
 
-	nus := user.NewSession(u, gwAddr, nk, grp.NewIntFromBytes([]byte("this is not a real public key")), grp)
+	nus := user.NewSession(cl.storage, u, gwAddr, nk,
+		grp.NewIntFromBytes([]byte("this is not a real public key")), grp)
 
 	_, err = payment.CreateWallet(nus, io.NewMessenger(), mint)
 	if err != nil {
@@ -144,7 +157,7 @@ func (cl *Client) Login(UID *id.User, addr string, tlsCert string) (string, erro
 
 	connect.GatewayCertString = tlsCert
 
-	session, err := user.LoadSession(UID)
+	session, err := user.LoadSession(cl.storage, UID)
 
 	if session == nil {
 		return "", errors.New("Unable to load session: " + err.Error() +
@@ -262,12 +275,6 @@ func (cl *Client) Logout() error {
 	}
 
 	errStore := cl.sess.StoreSession()
-	// If a client is logging in again, the storage may need to go into a
-	// different location
-	// Currently, none of the storage abstractions need to do anything to
-	// clean up in the long term. For example, DefaultStorage closes the
-	// file every time it's written.
-	globals.LocalStorage = nil
 
 	if errStore != nil {
 		err := errors.New(fmt.Sprintf("Logout: Store Failed: %s" +
diff --git a/api/client_test.go b/api/client_test.go
index e75b38b4cc6df05008b2c599893a0d04a1541397..30fcd9ab892891d1b6ed666cfb776a6885e6a735 100644
--- a/api/client_test.go
+++ b/api/client_test.go
@@ -34,7 +34,7 @@ var client *Client
 func TestRegistrationGob(t *testing.T) {
 	// Get a Client
 	var err error
-	client, err = InitClient(&globals.RamStorage{}, "")
+	client, err = NewClient(&globals.RamStorage{}, "")
 	if err != nil {
 		t.Error(err)
 	}
@@ -47,7 +47,7 @@ func TestRegistrationGob(t *testing.T) {
 	}
 
 	// get the gob out of there again
-	sessionGob := globals.LocalStorage.Load()
+	sessionGob := client.storage.Load()
 	var sessionBytes bytes.Buffer
 	sessionBytes.Write(sessionGob)
 	dec := gob.NewDecoder(&sessionBytes)
@@ -262,7 +262,8 @@ func TestRegisterUserE2E(t *testing.T) {
 	partnerPubKeyCyclic := grp.NewIntFromLargeInt(partnerPubKey.GetKey())
 
 	myUser := &user.User{User: userID, Nick: "test"}
-	session := user.NewSession(myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
+	session := user.NewSession(client.storage,
+		myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
 
 	client.sess = session
 
@@ -342,7 +343,8 @@ func TestRegisterUserE2E_CheckAllKeys(t *testing.T) {
 	partnerPubKeyCyclic := grp.NewIntFromLargeInt(partnerPubKey.GetKey())
 
 	myUser := &user.User{User: userID, Nick: "test"}
-	session := user.NewSession(myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
+	session := user.NewSession(client.storage,
+		myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
 
 	client.sess = session
 
diff --git a/api/mockserver_test.go b/api/mockserver_test.go
index a5df8e77d24105767aa1ed1e5025e7c48e37e5ca..459e38e28a85ed1e6f7973c9d496800f2ee8933c 100644
--- a/api/mockserver_test.go
+++ b/api/mockserver_test.go
@@ -11,7 +11,6 @@ import (
 	"fmt"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/crypto"
-	"gitlab.com/elixxir/client/globals"
 	"gitlab.com/elixxir/client/user"
 	"gitlab.com/elixxir/comms/gateway"
 	pb "gitlab.com/elixxir/comms/mixmessages"
@@ -41,19 +40,6 @@ func TestMain(m *testing.M) {
 	os.Exit(m.Run())
 }
 
-// Make sure InitClient registers storage.
-func TestInitClient(t *testing.T) {
-	globals.LocalStorage = nil
-	_, err := InitClient(nil, "")
-	if err != nil {
-		t.Errorf("InitClient failed on valid input: %v", err)
-	}
-	if globals.LocalStorage == nil {
-		t.Errorf("InitClient did not register storage.")
-	}
-	globals.LocalStorage = nil
-}
-
 func TestRegister(t *testing.T) {
 	gwShutDown := gateway.StartGateway(gwAddress,
 		gateway.NewImplementation(), "", "")
@@ -62,7 +48,7 @@ func TestRegister(t *testing.T) {
 
 	registrationCode := "UAV6IWD6"
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -86,7 +72,6 @@ func TestRegister(t *testing.T) {
 	if *regRes == *id.ZeroID {
 		t.Errorf("Invalid registration number received: %v", *regRes)
 	}
-	globals.LocalStorage = nil
 }
 
 func TestRegisterBadNumNodes(t *testing.T) {
@@ -97,7 +82,7 @@ func TestRegisterBadNumNodes(t *testing.T) {
 
 	registrationCode := "UAV6IWD6"
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	p := large.NewInt(int64(1))
 	g := large.NewInt(int64(2))
 	q := large.NewInt(int64(3))
@@ -106,7 +91,6 @@ func TestRegisterBadNumNodes(t *testing.T) {
 	if err == nil {
 		t.Errorf("Registration worked with bad numnodes! %s", err.Error())
 	}
-	globals.LocalStorage = nil
 }
 
 func TestRegisterBadHUID(t *testing.T) {
@@ -117,7 +101,7 @@ func TestRegisterBadHUID(t *testing.T) {
 
 	registrationCode := "OIF3OJ6I"
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	p := large.NewInt(int64(1))
 	g := large.NewInt(int64(2))
 	q := large.NewInt(int64(3))
@@ -126,7 +110,6 @@ func TestRegisterBadHUID(t *testing.T) {
 	if err == nil {
 		t.Error("Registration worked with bad registration code!")
 	}
-	globals.LocalStorage = nil
 }
 
 func TestRegisterDeletedUser(t *testing.T) {
@@ -137,7 +120,7 @@ func TestRegisterDeletedUser(t *testing.T) {
 
 	registrationCode := "UAV6IWD6"
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	p := large.NewInt(int64(1))
 	g := large.NewInt(int64(2))
 	q := large.NewInt(int64(3))
@@ -150,7 +133,6 @@ func TestRegisterDeletedUser(t *testing.T) {
 			err.Error())
 	}
 	user.Users.UpsertUser(tempUser)
-	globals.LocalStorage = nil
 }
 
 func SetNulKeys(s user.Session) {
@@ -169,9 +151,8 @@ func TestSend(t *testing.T) {
 	time.Sleep(100 * time.Millisecond)
 	defer gwShutDown()
 
-	globals.LocalStorage = nil
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	grp := crypto.InitCrypto()
 	registrationCode := "UAV6IWD6"
 	userID, err := client.Register(registrationCode, gwAddress, 1, false, grp)
@@ -212,9 +193,8 @@ func TestLogout(t *testing.T) {
 	time.Sleep(100 * time.Millisecond)
 	defer gwShutDown()
 
-	globals.LocalStorage = nil
 	d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	grp := crypto.InitCrypto()
 	registrationCode := "UAV6IWD6"
 	userID, err := client.Register(registrationCode, gwAddress, 1, false, grp)
diff --git a/bindings/client.go b/bindings/client.go
index 82ded2f5d0b23ff972055a9bfd0a441d9303acf9..bdb74194c11b002bf3a30acb82b1db4f329c6af3 100644
--- a/bindings/client.go
+++ b/bindings/client.go
@@ -100,13 +100,13 @@ func FormatTextMessage(message string) []byte {
 // loc is a string. If you're using DefaultStorage for your storage,
 // this would be the filename of the file that you're storing the user
 // session in.
-func InitClient(storage Storage, loc string) (*Client, error) {
+func NewClient(storage Storage, loc string) (*Client, error) {
 	if storage == nil {
 		return nil, errors.New("could not init client: Storage was nil")
 	}
 
 	proxy := &storageProxy{boundStorage: storage}
-	cl, err := api.InitClient(globals.Storage(proxy), loc)
+	cl, err := api.NewClient(globals.Storage(proxy), loc)
 
 	return &Client{client: cl}, err
 }
diff --git a/bindings/client_test.go b/bindings/client_test.go
index 4d12984b54ed357f1cd4d7bf5214917b034378cb..760b0955193946dce11a36586649723fb538e028 100644
--- a/bindings/client_test.go
+++ b/bindings/client_test.go
@@ -28,30 +28,27 @@ func TestMain(m *testing.M) {
 	os.Exit(m.Run())
 }
 
-// Make sure InitClient returns an error when called incorrectly.
-func TestInitClientNil(t *testing.T) {
-	_, err := InitClient(nil, "")
+// Make sure NewClient returns an error when called incorrectly.
+func TestNewClientNil(t *testing.T) {
+	_, err := NewClient(nil, "")
 	if err == nil {
-		t.Errorf("InitClient returned nil on invalid (nil, nil) input!")
+		t.Errorf("NewClient returned nil on invalid (nil, nil) input!")
 	}
-	globals.LocalStorage = nil
 
-	_, err = InitClient(nil, "hello")
+	_, err = NewClient(nil, "hello")
 	if err == nil {
-		t.Errorf("InitClient returned nil on invalid (nil, 'hello') input!")
+		t.Errorf("NewClient returned nil on invalid (nil, 'hello') input!")
 	}
-	globals.LocalStorage = nil
 }
 
-func TestInitClient(t *testing.T) {
+func TestNewClient(t *testing.T) {
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	if err != nil {
-		t.Errorf("InitClient returned error: %v", err)
+		t.Errorf("NewClient returned error: %v", err)
 	} else if client == nil {
-		t.Errorf("InitClient returned nil Client object")
+		t.Errorf("NewClient returned nil Client object")
 	}
-	globals.LocalStorage = nil
 }
 
 // BytesReceiver receives the last message and puts the data it received into
@@ -77,7 +74,7 @@ func TestRegister(t *testing.T) {
 	defer gwShutDown()
 	registrationCode := "UAV6IWD6"
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -106,7 +103,6 @@ func TestRegister(t *testing.T) {
 	if len(regRes) == 0 {
 		t.Errorf("Invalid registration number received: %v", regRes)
 	}
-	globals.LocalStorage = nil
 }
 
 func TestRegisterBadNumNodes(t *testing.T) {
@@ -116,7 +112,7 @@ func TestRegisterBadNumNodes(t *testing.T) {
 	defer gwShutDown()
 	registrationCode := "UAV6IWD6"
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	p := large.NewInt(int64(1))
 	g := large.NewInt(int64(2))
 	q := large.NewInt(int64(3))
@@ -130,7 +126,6 @@ func TestRegisterBadNumNodes(t *testing.T) {
 	if err == nil {
 		t.Errorf("Registration worked with bad numnodes! %s", err.Error())
 	}
-	globals.LocalStorage = nil
 }
 
 func TestLoginLogout(t *testing.T) {
@@ -140,7 +135,7 @@ func TestLoginLogout(t *testing.T) {
 	defer gwShutDown()
 	registrationCode := "UAV6IWD6"
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, err := InitClient(&d, "hello")
+	client, err := NewClient(&d, "hello")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -175,8 +170,6 @@ func TestLoginLogout(t *testing.T) {
 	if err3 != nil {
 		t.Errorf("Logoutfailed: %s", err.Error())
 	}
-
-	globals.LocalStorage = nil
 }
 
 type MockListener bool
@@ -188,7 +181,7 @@ func (m *MockListener) Hear(msg Message, isHeardElsewhere bool) {
 // Proves that a message can be received by a listener added with the bindings
 func TestListen(t *testing.T) {
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, _ := InitClient(&d, "hello")
+	client, _ := NewClient(&d, "hello")
 	listener := MockListener(false)
 	client.Listen(id.ZeroID[:], int32(cmixproto.Type_NO_TYPE), &listener)
 	client.client.GetSwitchboard().Speak(&parse.Message{
@@ -202,12 +195,11 @@ func TestListen(t *testing.T) {
 	if !listener {
 		t.Error("Message not received")
 	}
-	globals.LocalStorage = nil
 }
 
 func TestStopListening(t *testing.T) {
 	d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
-	client, _ := InitClient(&d, "hello")
+	client, _ := NewClient(&d, "hello")
 	listener := MockListener(false)
 	handle := client.Listen(id.ZeroID[:], int32(cmixproto.Type_NO_TYPE), &listener)
 	client.StopListening(handle)
@@ -222,7 +214,6 @@ func TestStopListening(t *testing.T) {
 	if listener {
 		t.Error("Message was received after we stopped listening for it")
 	}
-	globals.LocalStorage = nil
 }
 
 type MockWriter struct {
diff --git a/cmd/root.go b/cmd/root.go
index 3e237639db0fb99977ff3306993a766ec1d44f4f..aa53c8a692e1876b0f3051fb3a974b7fc9993ec3 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -65,7 +65,7 @@ func sessionInitialization() {
 
 	//If no session file is passed initialize with RAM Storage
 	if sessionFile == "" {
-		client, err = api.InitClient(&globals.RamStorage{}, "")
+		client, err = api.NewClient(&globals.RamStorage{}, "")
 		if err != nil {
 			fmt.Printf("Could Not Initialize Ram Storage: %s\n",
 				err.Error())
@@ -88,7 +88,7 @@ func sessionInitialization() {
 		}
 
 		//Initialize client with OS Storage
-		client, err = api.InitClient(&globals.DefaultStorage{}, sessionFile)
+		client, err = api.NewClient(nil, sessionFile)
 
 		if err != nil {
 			fmt.Printf("Could Not Initialize OS Storage: %s\n", err.Error())
diff --git a/crypto/encryptdecrypt_test.go b/crypto/encryptdecrypt_test.go
index 7353ad2c0eb2de1172a1a3888e11c95886687e0d..f04f2c22f90da203ae36b7f76030b70e77f436c2 100644
--- a/crypto/encryptdecrypt_test.go
+++ b/crypto/encryptdecrypt_test.go
@@ -70,7 +70,7 @@ func setup(t *testing.T) {
 		nk[i].ReceptionKeys.Recursive = grp.Inverse(
 			nk[i].TransmissionKeys.Recursive, grp.NewInt(1))
 	}
-	session = user.NewSession(u, "", nk, nil, grp)
+	session = user.NewSession(nil, u, "", nk, nil, grp)
 }
 
 func TestEncryptDecrypt(t *testing.T) {
diff --git a/globals/storage.go b/globals/storage.go
index 8cb1eac4fc8dcd4f4d5fe6483a825a231b300717..f214bc13039dfe05f24634f01536d73ad7dad6d9 100644
--- a/globals/storage.go
+++ b/globals/storage.go
@@ -7,41 +7,10 @@
 package globals
 
 import (
-	"errors"
 	"os"
 	"sync"
 )
 
-var LocalStorage Storage
-
-func InitStorage(store Storage, location string) error {
-	if LocalStorage != nil {
-		errStr := "Invalid Local Storage Creation: Local storage already created"
-		Log.ERROR.Printf(errStr)
-		panic(errStr)
-	}
-
-	var intermediateStorage Storage
-
-	if store == nil {
-		intermediateStorage = &DefaultStorage{}
-	} else {
-		intermediateStorage = store
-	}
-
-	err := intermediateStorage.SetLocation(location)
-
-	if err != nil {
-		err = errors.New("Invalid Local Storage Location: " + err.Error())
-		Log.ERROR.Printf(err.Error())
-		return err
-	}
-
-	LocalStorage = intermediateStorage
-
-	return nil
-}
-
 type Storage interface {
 	SetLocation(string) error
 	GetLocation() string
diff --git a/globals/storage_test.go b/globals/storage_test.go
index f6bc7fc7fe1b7010f61d0e62a97413229acc0c39..fab0e91baf75f5290904cb0e4b30b0b371e03be7 100644
--- a/globals/storage_test.go
+++ b/globals/storage_test.go
@@ -15,30 +15,20 @@ import (
 func TestInitStorage(t *testing.T) {
 	TestData := []byte{12, 14, 54}
 	TestSaveLoc := "testStorage.data"
-	// Test with existing storage
-	LocalStorage = new(RamStorage)
-	// err := InitStorage(nil, "")
-	// if err == nil {
-	// 	t.Errorf("InitStorage failed to fail with existing storage")
-	// }
-	// LocalStorage = nil
 
 	// Test DefaultStorage initialization without existing storage
-	LocalStorage = nil
-	err := InitStorage(nil, TestSaveLoc)
-	if LocalStorage == nil {
-		t.Errorf("InitStorage failed to create a default storage")
-	}
+	storage := &DefaultStorage{}
+	storage.SetLocation(TestSaveLoc)
 
 	// Check that DS file location is correct
 	//jww.ERROR.Printf("Default Storage file location: %v",
 	//	LocalStorage.GetLocation())
 
 	// Test DS save
-	err = LocalStorage.Save(TestData)
+	err := storage.Save(TestData)
 	if err != nil {
 		t.Errorf("ds.Save failed to create a save file at: %v",
-			LocalStorage.GetLocation())
+			storage.GetLocation())
 	}
 	// Check that save file was made
 	if !exists(TestSaveLoc) {
@@ -46,31 +36,22 @@ func TestInitStorage(t *testing.T) {
 			TestSaveLoc)
 	}
 	// Test DS load
-	actualData := LocalStorage.Load()
+	actualData := storage.Load()
 	if reflect.DeepEqual(actualData, TestData) != true {
 		t.Errorf("ds.Load failed to load expected data. Expected:%v Actual:%v",
 			TestData, actualData)
 	}
-	LocalStorage = nil
 
 	// Test RamStorage
-	LocalStorage = nil
 	store := RamStorage{}
-	err = InitStorage(&store, "")
-	if err != nil {
-		t.Errorf("InitStorage failed to initialize a RamStorage: %s", err.Error())
-	}
 	actualData = nil
-	LocalStorage.Save(TestData)
-	actualData = LocalStorage.Load()
+	store.Save(TestData)
+	actualData = store.Load()
 	if reflect.DeepEqual(actualData, TestData) != true {
 		t.Errorf("rs.Load failed to load expected data. Expected:%v Actual:%v",
 			TestData, actualData)
 	}
 	os.Remove(TestSaveLoc)
-
-	LocalStorage = nil
-
 }
 
 // exists returns whether the given file or directory exists or not
diff --git a/payment/orderedStorage_test.go b/payment/orderedStorage_test.go
index 150ea152e5f105d8cb7b4d0ec52bd19b7a9be56b..a0ec4e430cb60c57ec2803413f74fe9806550716 100644
--- a/payment/orderedStorage_test.go
+++ b/payment/orderedStorage_test.go
@@ -22,11 +22,10 @@ import (
 
 // Shows that CreateOrderedStorage creates new storage properly
 func TestCreateOrderedStorage_New(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	userID := id.NewUserFromUint(1, t)
 	grp := cyclic.NewGroup(large.NewInt(100000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	// show that the ordered list does not exist
@@ -69,8 +68,6 @@ func TestCreateOrderedStorage_New(t *testing.T) {
 
 // Shows that CreateOrderedStorage loads old storage properly
 func TestCreateOrderedStorage_Load(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	userID := id.NewUserFromUint(1, t)
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
@@ -88,7 +85,8 @@ func TestCreateOrderedStorage_Load(t *testing.T) {
 	g := large.NewInt(2)
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	// show that the ordered list does not exist
@@ -133,8 +131,6 @@ func TestCreateOrderedStorage_Load(t *testing.T) {
 // Shows that OrderedCoinStorage.Value returns the value of the storage correctly
 func TestOrderedCoinStorage_Value(t *testing.T) {
 
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -152,7 +148,8 @@ func TestOrderedCoinStorage_Value(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	userID := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	src := rand.NewSource(42)
@@ -173,8 +170,6 @@ func TestOrderedCoinStorage_Value(t *testing.T) {
 
 // Shows that OrderedCoinStorage.Add works when the list is empty
 func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -192,7 +187,8 @@ func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	userID := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	cs, err := coin.NewSleeve(69)
@@ -212,8 +208,6 @@ func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
 
 // Shows that OrderedCoinStorage.Add works when the list isn't empty and properly orders the list
 func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -231,7 +225,8 @@ func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	userID := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	ocs := OrderedCoinStorage{&[]coin.Sleeve{}, 0, s}
@@ -273,8 +268,6 @@ func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
 // Shows that added sleeves can be loaded after a save
 func TestOrderedCoinStorage_Add_Save(t *testing.T) {
 
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -292,7 +285,8 @@ func TestOrderedCoinStorage_Add_Save(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	userID := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{userID, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	// show that the ordered list does not exist
@@ -328,8 +322,6 @@ func TestOrderedCoinStorage_Add_Save(t *testing.T) {
 
 // Shows that a single sleeve can be gotten from ordered coin storage
 func TestOrderedCoinStorage_Get(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -347,7 +339,8 @@ func TestOrderedCoinStorage_Get(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -384,8 +377,6 @@ func TestOrderedCoinStorage_Get(t *testing.T) {
 
 // Shows that a single sleeve can be popped from ordered coin storage
 func TestOrderedCoinStorage_Pop(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -403,7 +394,8 @@ func TestOrderedCoinStorage_Pop(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -440,8 +432,6 @@ func TestOrderedCoinStorage_Pop(t *testing.T) {
 
 // Shows that when a sleeve is popped from ordered coin storage the result can be saved properly
 func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -459,7 +449,8 @@ func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -514,8 +505,6 @@ func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
 
 // Test that fund responds correct with insufficient funds
 func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -533,7 +522,8 @@ func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -573,8 +563,6 @@ func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
 
 // Tests that a single coin equal to the correct value returns properly
 func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -592,7 +580,8 @@ func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -633,8 +622,6 @@ func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
 
 // Tests that a multiple coins equal to the correct value returns properly
 func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -652,7 +639,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -705,8 +693,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
 
 // Tests that a multiple coins equal to the correct value returns properly when there are other coins
 func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -724,7 +710,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -777,8 +764,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
 
 // Tests that fund returns an error when the value cannot be created in the given number of coins
 func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -796,7 +781,8 @@ func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -834,8 +820,6 @@ func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
 
 // Tests that a multiple coins equal greater than the expected value returns properly when there are other coins
 func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -853,7 +837,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	key := "TestOrderedList"
@@ -907,7 +892,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
 
 // Shows that Ordered Storage reloads from a stored map properly
 func TestOrderedStorage_FileLoading(t *testing.T) {
-	globals.LocalStorage = nil
 
 	storagePath, err := homedir.Expand("~/.elixxir")
 	filename := "/orderedstoragetest.session"
@@ -915,7 +899,6 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
 	if err != nil {
 		t.Error(err.Error())
 	}
-	globals.InitStorage(&globals.DefaultStorage{}, storagePath+filename)
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -933,7 +916,9 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
 	uid := id.NewUserFromUint(1, t)
-	s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+	storage := &globals.RamStorage{}
+	s := user.NewSession(storage,
+		&user.User{uid, "test"}, "", []user.NodeKeys{},
 		grp.NewInt(1), grp)
 
 	// show that the ordered list does not exist
@@ -963,7 +948,7 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
 
 	s.StoreSession()
 
-	s2, err := user.LoadSession(uid)
+	s2, err := user.LoadSession(storage, uid)
 
 	if err != nil {
 		t.Errorf("session load error: %s", err.Error())
@@ -993,7 +978,7 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
 
 	s2.StoreSession()
 
-	s3, err := user.LoadSession(uid)
+	s3, err := user.LoadSession(storage, uid)
 
 	if err != nil {
 		t.Errorf("session load error: %s", err.Error())
diff --git a/payment/transactionList_test.go b/payment/transactionList_test.go
index ace94fa008b6f27007b0f1c269e0c83795ecb16d..95ce27dd0f4bc283286dec0cff076191f997d0e4 100644
--- a/payment/transactionList_test.go
+++ b/payment/transactionList_test.go
@@ -23,10 +23,9 @@ import (
 )
 
 func MockNewSession(t *testing.T) user.Session {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(100000), large.NewInt(0), large.NewInt(0))
-	return user.NewSession(&user.User{User: id.NewUserFromUint(1, t),
+	return user.NewSession(&globals.RamStorage{},
+	&user.User{User: id.NewUserFromUint(1, t),
 		Nick: "test"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 }
diff --git a/payment/wallet_test.go b/payment/wallet_test.go
index 5cc28072995bee1a3f478a91cc459ef3b0a8a4f2..041f9c5dc8d7550b5a7e9b7240fc1a8f816cb8b8 100644
--- a/payment/wallet_test.go
+++ b/payment/wallet_test.go
@@ -33,11 +33,9 @@ func TestWallet_registerInvoice(t *testing.T) {
 	payer := id.NewUserFromUint(2, t)
 	memo := "for serious cryptography"
 	value := uint64(85)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(10000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payee, Nick: "Taxman McGee"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	or, err := createTransactionList(OutboundRequestsTag, s)
@@ -88,10 +86,9 @@ func TestWallet_registerInvoice(t *testing.T) {
 
 // Shows that CreateWallet creates new wallet properly
 func TestCreateWallet(t *testing.T) {
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: id.NewUserFromUint(1, t),
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: id.NewUserFromUint(1, t),
 		Nick: "test"}, "", []user.NodeKeys{}, grp.NewInt(1), grp)
 
 	_, err := CreateWallet(s, io.NewMessenger(), false)
@@ -140,8 +137,6 @@ func TestWallet_Invoice(t *testing.T) {
 	invoiceTime := time.Now()
 
 	// Set up the wallet and its storage
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -158,7 +153,8 @@ func TestWallet_Invoice(t *testing.T) {
 	g := large.NewInt(2)
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
-	s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payee, Nick: "Taxman McGee"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	or, err := createTransactionList(OutboundRequestsTag, s)
@@ -412,8 +408,6 @@ func TestInvoiceListener_Hear(t *testing.T) {
 	value := uint64(50)
 	memo := "please gib"
 	// Set up the wallet and its storage
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -430,7 +424,8 @@ func TestInvoiceListener_Hear(t *testing.T) {
 	g := large.NewInt(2)
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
-	s := user.NewSession(&user.User{User: payer, Nick: "CEO MF DOOM"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "CEO MF DOOM"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	ir, err := createTransactionList(InboundRequestsTag, s)
@@ -516,8 +511,6 @@ func TestWallet_Invoice_Error(t *testing.T) {
 	value := int64(0)
 
 	// Set up the wallet and its storage
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
 		"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
 		"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -534,7 +527,8 @@ func TestWallet_Invoice_Error(t *testing.T) {
 	g := large.NewInt(2)
 	q := large.NewInt(3)
 	grp := cyclic.NewGroup(p, g, q)
-	s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payee, Nick: "Taxman McGee"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	or, err := createTransactionList(OutboundRequestsTag, s)
@@ -578,11 +572,9 @@ func (m *MockMessaging) MessageReceiver(session user.Session,
 func TestResponseListener_Hear(t *testing.T) {
 	payer := id.NewUserFromUint(5, t)
 	payee := id.NewUserFromUint(12, t)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "Darth Icky"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	walletAmount := uint64(8970)
@@ -702,11 +694,9 @@ func TestResponseListener_Hear(t *testing.T) {
 func TestResponseListener_Hear_Failure(t *testing.T) {
 	payer := id.NewUserFromUint(5, t)
 	payee := id.NewUserFromUint(12, t)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "Darth Icky"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	walletAmount := uint64(8970)
@@ -815,11 +805,9 @@ func TestResponseListener_Hear_Failure(t *testing.T) {
 func TestWallet_Pay_NoChange(t *testing.T) {
 	payer := id.NewUserFromUint(5, t)
 	payee := id.NewUserFromUint(12, t)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(190000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "Darth Icky"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	paymentAmount := uint64(5008)
@@ -909,11 +897,9 @@ func TestWallet_Pay_NoChange(t *testing.T) {
 func TestWallet_Pay_YesChange(t *testing.T) {
 	payer := id.NewUserFromUint(5, t)
 	payee := id.NewUserFromUint(12, t)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(1000000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "Darth Icky"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	paymentAmount := uint64(2611)
@@ -1037,11 +1023,9 @@ func (rl *ReceiptUIListener) Hear(msg switchboard.Item, isHeardElsewhere bool) {
 func TestReceiptListener_Hear(t *testing.T) {
 	payer := id.NewUserFromUint(5, t)
 	payee := id.NewUserFromUint(12, t)
-
-	globals.LocalStorage = nil
-	globals.InitStorage(&globals.RamStorage{}, "")
 	grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
-	s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+	s := user.NewSession(&globals.RamStorage{},
+		&user.User{User: payer, Nick: "Darth Icky"}, "",
 		[]user.NodeKeys{}, grp.NewInt(1), grp)
 
 	walletAmount := uint64(8970)
diff --git a/user/session.go b/user/session.go
index 46a8d5f35a25cd1c6f8f1879f0b05e8efd080cd8..509d949858ffc5dbf69d61b2de3c249b1452a468 100644
--- a/user/session.go
+++ b/user/session.go
@@ -60,7 +60,9 @@ type RatchetKey struct {
 }
 
 // Creates a new Session interface for registration
-func NewSession(u *User, GatewayAddr string, nk []NodeKeys, publicKey *cyclic.Int, grp *cyclic.Group) Session {
+func NewSession(store globals.Storage,
+	u *User, GatewayAddr string, nk []NodeKeys,
+	publicKey *cyclic.Int, grp *cyclic.Group) Session {
 
 	// With an underlying Session data structure
 	return Session(&SessionObj{
@@ -73,19 +75,21 @@ func NewSession(u *User, GatewayAddr string, nk []NodeKeys, publicKey *cyclic.In
 		InterfaceMap: make(map[string]interface{}),
 		KeyManagers:  make([]*keyStore.KeyManager, 0),
 		keyMaps:      keyStore.NewStore(),
+		store:        store,
 	})
 
 }
 
-func LoadSession(UID *id.User) (Session, error) {
-	if globals.LocalStorage == nil {
-		err := errors.New("StoreSession: Local Storage not avalible")
+func LoadSession(store globals.Storage,
+	UID *id.User) (Session, error) {
+	if store == nil {
+		err := errors.New("LoadSession: Local Storage not avalible")
 		return nil, err
 	}
 
 	rand.Seed(time.Now().UnixNano())
 
-	sessionGob := globals.LocalStorage.Load()
+	sessionGob := store.Load()
 
 	var sessionBytes bytes.Buffer
 
@@ -132,6 +136,8 @@ func LoadSession(UID *id.User) (Session, error) {
 		km.GenerateKeys(session.Grp, UID, session.keyMaps)
 	}
 
+	// Set storage pointer
+	session.store = store
 	return &session, nil
 }
 
@@ -159,6 +165,9 @@ type SessionObj struct {
 	// E2E KeyStore (not GOB encoded/decoded)
 	keyMaps *keyStore.KeyStore
 
+	// Keep a local pointer to storage of this session
+	store globals.Storage
+
 	lock sync.Mutex
 }
 
@@ -227,13 +236,13 @@ func (s *SessionObj) SetGWAddress(addr string) {
 
 func (s *SessionObj) storeSession() error {
 
-	if globals.LocalStorage == nil {
+	if s.store == nil {
 		err := errors.New("StoreSession: Local Storage not available")
 		return err
 	}
 
 	sessionData, err := s.getSessionData()
-	err = globals.LocalStorage.Save(sessionData)
+	err = s.store.Save(sessionData)
 	if err != nil {
 		return err
 	}
diff --git a/user/session_test.go b/user/session_test.go
index 97233db4346dbd9d430325d2ad42d09b5b6bf6c2..9bc5aee6379c55a02703e75bc4f7bb47580bd674 100644
--- a/user/session_test.go
+++ b/user/session_test.go
@@ -40,19 +40,17 @@ func TestUserSession(t *testing.T) {
 		ReturnKeys:       RatchetKey{grp.NewInt(2), grp.NewInt(2)},
 	}
 
-	err := globals.InitStorage(&globals.RamStorage{}, "")
-
-	if err != nil {
-		t.Errorf("User Session: Local storage could not be created: %s", err.Error())
-	}
+	// Storage
+	storage := &globals.RamStorage{}
 
 	//Ask Ben if there should be a Node Address here!
-	ses := NewSession(u, "abc", keys, grp.NewInt(2), grp)
+	ses := NewSession(storage,
+	u, "abc", keys, grp.NewInt(2), grp)
 
 	ses.(*SessionObj).PrivateKey = grp.NewInt(2)
 	ses.SetLastMessageID("totally unique ID")
 
-	err = ses.StoreSession()
+	err := ses.StoreSession()
 
 	if err != nil {
 		t.Errorf("Error: Session not stored correctly: %s", err.Error())
@@ -62,7 +60,7 @@ func TestUserSession(t *testing.T) {
 
 	//TODO: write test which validates the immolation
 
-	ses, err = LoadSession(id.NewUserFromUint(UID, t))
+	ses, err = LoadSession(storage, id.NewUserFromUint(UID, t))
 
 	if err != nil {
 		t.Errorf("Error: Unable to login with valid user: %v", err.Error())
@@ -70,7 +68,8 @@ func TestUserSession(t *testing.T) {
 		pass++
 	}
 	
-	_, err = LoadSession(id.NewUserFromUint(10002, t))
+	_, err = LoadSession(storage,
+		id.NewUserFromUint(10002, t))
 
 	if err == nil {
 		t.Errorf("Error: Able to login with invalid user!")
@@ -194,23 +193,20 @@ func TestUserSession(t *testing.T) {
 	// Error tests
 
 	// Test nil LocalStorage
-	temp := globals.LocalStorage
-	globals.LocalStorage = nil
 
-	_, err = LoadSession(id.NewUserFromUint(6, t))
+	_, err = LoadSession(nil, id.NewUserFromUint(6, t))
 
 	if err == nil {
 		t.Errorf("Error did not catch a nil LocalStorage")
 	}
-	globals.LocalStorage = temp
 
 	// Test invalid / corrupted LocalStorage
 	h := sha256.New()
 	h.Write([]byte(string(20000)))
 	randBytes := h.Sum(nil)
-	globals.LocalStorage.Save(randBytes)
+	storage.Save(randBytes)
 
-	_, err = LoadSession(id.NewUserFromUint(6, t))
+	_, err = LoadSession(storage, id.NewUserFromUint(6, t))
 
 	if err == nil {
 		t.Errorf("Error did not catch a corrupt LocalStorage")
@@ -234,7 +230,7 @@ func TestGetPubKey(t *testing.T) {
 		ReturnKeys:       RatchetKey{grp.NewInt(2), grp.NewInt(2)},
 	}
 
-	ses := NewSession(u, "abc", keys, grp.NewInt(2), grp)
+	ses := NewSession(nil, u, "abc", keys, grp.NewInt(2), grp)
 	pubKey := ses.GetPublicKey()
 	if pubKey.Cmp(grp.NewInt(2)) != 0 {
 		t.Errorf("Public key is not set correctly!")