diff --git a/api/client.go b/api/client.go
index 746ddbd3a9664c2f7423ab9c0d931ed3cb87914c..f749fb4424408ed63a201514ffdc2f98d500a461 100644
--- a/api/client.go
+++ b/api/client.go
@@ -436,51 +436,57 @@ func (cl *Client) Register(preCan bool, registrationCode, nick, email string) (*
 	return UID, nil
 }
 
-// Logs in user and sets session on client object
-// returns the nickname or error if login fails
-func (cl *Client) Login(UID *id.User) (string, error) {
+// LoadSession loads the session object for the UID
+func (cl *Client) LoadSession(UID *id.User) error {
 	session, err := user.LoadSession(cl.storage, UID)
 
-	if session == nil {
-		return "", errors.New("Unable to load session: " + err.Error())
-	}
-
-	(cl.comm).(*io.Messaging).SendGateway =
-		id.NewNodeFromBytes(cl.ndf.Nodes[0].ID).NewGateway()
-	(cl.comm).(*io.Messaging).ReceiveGateway =
-		id.NewNodeFromBytes(cl.ndf.Nodes[len(cl.ndf.Nodes)-1].ID).NewGateway()
-
 	if err != nil {
 		err = errors.New(fmt.Sprintf("Login: Could not login: %s",
 			err.Error()))
 		globals.Log.ERROR.Printf(err.Error())
-		return "", err
+		return err
+	}
+
+	if session == nil {
+		return errors.New("Unable to load session: " + err.Error())
 	}
 
 	cl.session = session
+	return nil
+}
 
-	pollWaitTimeMillis := 1000 * time.Millisecond
-	// TODO Don't start the message receiver if it's already started.
-	// Should be a pretty rare occurrence except perhaps for mobile.
-	go cl.comm.MessageReceiver(session, pollWaitTimeMillis)
+// Logs in user and sets session on client object
+// returns the nickname or error if login fails
+func (cl *Client) Login(UID *id.User) (string, error) {
+	(cl.comm).(*io.Messaging).SendGateway =
+		id.NewNodeFromBytes(cl.ndf.Nodes[0].ID).NewGateway()
+	(cl.comm).(*io.Messaging).ReceiveGateway =
+		id.NewNodeFromBytes(cl.ndf.Nodes[len(cl.ndf.Nodes)-1].ID).NewGateway()
 
 	// Initialize UDB and nickname "bot" stuff here
 	bots.InitBots(cl.session, cl.comm, cl.topology)
 	// Initialize Rekey listeners
 	rekey.InitRekey(cl.session, cl.comm, cl.topology)
 
-	email := session.GetCurrentUser().Email
+	pollWaitTimeMillis := 1000 * time.Millisecond
+	// TODO Don't start the message receiver if it's already started.
+	// Should be a pretty rare occurrence except perhaps for mobile.
+	go cl.comm.MessageReceiver(cl.session, pollWaitTimeMillis)
+
+	email := cl.session.GetCurrentUser().Email
 
 	if email != "" {
-		err = cl.registerForUserDiscovery(email)
+		globals.Log.INFO.Printf("Registering user as %s", email)
+		err := cl.registerForUserDiscovery(email)
 		if err != nil {
 			globals.Log.ERROR.Printf(
 				"Unable to register with UDB: %s", err)
 			return "", err
 		}
+		globals.Log.INFO.Printf("Registered!")
 	}
 
-	return session.GetCurrentUser().Nick, nil
+	return cl.session.GetCurrentUser().Nick, nil
 }
 
 // Send prepares and sends a message to the cMix network
diff --git a/cmd/root.go b/cmd/root.go
index 027a7fa99bf08224618e4ef2f29565434289da6c..8adebfd86ef6d9af1222653cedbcaecc56529191 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -189,6 +189,12 @@ func sessionInitialization() (*id.User, *api.Client) {
 		globals.Log.INFO.Printf("Skipped Registration, user: %v", uid)
 	}
 
+	err = client.LoadSession(uid)
+
+	if err != nil {
+		globals.Log.FATAL.Panicf("Could not load session: %v", err)
+	}
+
 	return uid, client
 }
 
@@ -342,6 +348,7 @@ var rootCmd = &cobra.Command{
 		if len(keyParams) == 5 {
 			setKeyParams(client)
 		}
+
 		// Set up the listeners for both of the types the client needs for
 		// the integration test
 		// Normal text messages
@@ -522,7 +529,7 @@ func init() {
 
 	rootCmd.PersistentFlags().StringVarP(&userEmail,
 		"email", "E",
-		"default@default.com",
+		"",
 		"Email to register for User Discovery")
 
 	rootCmd.PersistentFlags().StringVar(&userNick,