diff --git a/api/client.go b/api/client.go
index 9068708d01307030a811065b810588d8614b677c..118615bdcb7d4dc23b6a7fde682a3fdc224b4a6a 100644
--- a/api/client.go
+++ b/api/client.go
@@ -435,15 +435,16 @@ func (c *Client) StopNetworkFollower(timeout time.Duration) error {
 		return errors.WithMessage(err, "Failed to Stop the Network Follower")
 	}
 	err = c.runner.Close(timeout)
-	if err != nil {
-		return errors.WithMessage(err, "Failed to Stop the Network Follower")
-	}
 	c.runner = stoppable.NewMulti("client")
-	err = c.status.toStopped()
-	if err != nil {
-		return errors.WithMessage(err, "Failed to Stop the Network Follower")
+	err2 := c.status.toStopped()
+	if err2 != nil {
+		if err ==nil{
+			err = err2
+		}else{
+			err = errors.WithMessage(err,err2.Error())
+		}
 	}
-	return nil
+	return err
 }
 
 // NetworkFollowerStatus Gets the state of the network follower. Returns:
diff --git a/api/version_vars.go b/api/version_vars.go
index 7a6a80ad7afc287095b1f57d7b6f7f975171495d..75d1adeef89b0d9ed44699e42d0bb7e6306fbbb6 100644
--- a/api/version_vars.go
+++ b/api/version_vars.go
@@ -1,10 +1,10 @@
 // Code generated by go generate; DO NOT EDIT.
 // This file was generated by robots at
-// 2021-05-05 15:53:47.443011 -0500 CDT m=+0.014473892
+// 2021-05-07 09:33:37.4750421 -0700 PDT m=+0.043142701
 package api
 
-const GITVERSION = `b6f474ae fixed sendCmix time delay and the interface for bindings time now`
-const SEMVER = "2.4.0"
+const GITVERSION = `51fdae45 made stop network follower always allow restart`
+const SEMVER = "2.5.0"
 const DEPENDENCIES = `module gitlab.com/elixxir/client
 
 go 1.13
@@ -24,14 +24,15 @@ require (
 	github.com/spf13/jwalterweatherman v1.1.0
 	github.com/spf13/viper v1.7.1
 	gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228
-	gitlab.com/elixxir/comms v0.0.4-0.20210505205202-1d4c18a7fcb2
-	gitlab.com/elixxir/crypto v0.0.7-0.20210504210535-3077ddf9984d
+	gitlab.com/elixxir/comms v0.0.4-0.20210506225017-37485f5ba063
+	gitlab.com/elixxir/crypto v0.0.7-0.20210506223047-3196e4301110
 	gitlab.com/elixxir/ekv v0.1.5
 	gitlab.com/elixxir/primitives v0.0.3-0.20210504210415-34cf31c2816e
 	gitlab.com/xx_network/comms v0.0.4-0.20210505205155-48daa8448ad7
 	gitlab.com/xx_network/crypto v0.0.5-0.20210504210244-9ddabbad25fd
 	gitlab.com/xx_network/primitives v0.0.4-0.20210504205835-db68f11de78a
 	golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
+	golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
 	golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 // indirect
 	google.golang.org/genproto v0.0.0-20210105202744-fe13368bc0e1 // indirect
 	google.golang.org/grpc v1.34.0 // indirect
diff --git a/auth/request.go b/auth/request.go
index c43707904f835b19d1e64ba53cb4ec9fe550355f..76af994787f8e1658e13345bf14883e091e7790d 100644
--- a/auth/request.go
+++ b/auth/request.go
@@ -55,17 +55,20 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader,
 	//lookup if an ongoing request is occurring
 	rqType, sr, _, err := storage.Auth().GetRequest(partner.ID)
 
-	if err != nil && !strings.Contains(err.Error(), auth.NoRequest){
+	if err == nil {
 		if rqType == auth.Receive {
-			return 0, errors.WithMessage(err,
-				"Cannot send a request after receiving a request")
+			return 0, errors.Errorf("Cannot send a request after " +
+				"receiving a request")
 		} else if rqType == auth.Sent {
 			resend = true
 		}else{
-			return 0, errors.WithMessage(err,
-				"Cannot send a request after receiving unknown error " +
-				"on requesting contact status")
+			return 0, errors.Errorf("Cannot send a request after " +
+				" a stored request with unknown rqType: %d", rqType)
 		}
+	}else if !strings.Contains(err.Error(), auth.NoRequest){
+		return 0, errors.WithMessage(err,
+			"Cannot send a request after receiving unknown error " +
+				"on requesting contact status")
 	}
 
 	grp := storage.E2e().GetGroup()
diff --git a/cmd/version.go b/cmd/version.go
index b781e502cb97afc8edd8c90300c8a9f1e5816969..67b545b53c3ed7e36e85abccbeadf817bc52dc25 100644
--- a/cmd/version.go
+++ b/cmd/version.go
@@ -18,7 +18,7 @@ import (
 )
 
 // Change this value to set the version for this build
-const currentVersion = "2.4.0"
+const currentVersion = "2.5.0"
 
 func Version() string {
 	out := fmt.Sprintf("Elixxir Client v%s -- %s\n\n", api.SEMVER,
diff --git a/go.mod b/go.mod
index b8327e0195269546595585518ee07b2583071bd4..7142c43f2d9fa81eacd6878befdc445e5d8f8a1f 100644
--- a/go.mod
+++ b/go.mod
@@ -17,8 +17,8 @@ require (
 	github.com/spf13/jwalterweatherman v1.1.0
 	github.com/spf13/viper v1.7.1
 	gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228
-	gitlab.com/elixxir/comms v0.0.4-0.20210506161214-6371db79ce6f
-	gitlab.com/elixxir/crypto v0.0.7-0.20210504210535-3077ddf9984d
+	gitlab.com/elixxir/comms v0.0.4-0.20210506225017-37485f5ba063
+	gitlab.com/elixxir/crypto v0.0.7-0.20210506223047-3196e4301110
 	gitlab.com/elixxir/ekv v0.1.5
 	gitlab.com/elixxir/primitives v0.0.3-0.20210504210415-34cf31c2816e
 	gitlab.com/xx_network/comms v0.0.4-0.20210505205155-48daa8448ad7
diff --git a/go.sum b/go.sum
index e07685770c61db52aa8e701d5040959f292fcbf5..c02d426f81e92c2cecddcaabb483586a412caa9e 100644
--- a/go.sum
+++ b/go.sum
@@ -257,12 +257,16 @@ gitlab.com/elixxir/comms v0.0.4-0.20210505205202-1d4c18a7fcb2 h1:8aL4V7FaKkDb5iP
 gitlab.com/elixxir/comms v0.0.4-0.20210505205202-1d4c18a7fcb2/go.mod h1:VN0fNE7GFMrkZwRGnqA7fNNRAXDA4CCP6su/FQQ68RI=
 gitlab.com/elixxir/comms v0.0.4-0.20210506161214-6371db79ce6f h1:0hvU+6Y+JGFnBu8ZSMk0ukNuYg+GAnVKD8Yo4VwSdao=
 gitlab.com/elixxir/comms v0.0.4-0.20210506161214-6371db79ce6f/go.mod h1:7ff+A4Nom55mKiRW7qWsN7LDjGay4OZwiaaIVXZ4hdk=
+gitlab.com/elixxir/comms v0.0.4-0.20210506225017-37485f5ba063 h1:9A2FT1IDzb9E0HaEEcRMAZEVRM4SMXpklYvS6owSyIk=
+gitlab.com/elixxir/comms v0.0.4-0.20210506225017-37485f5ba063/go.mod h1:KHV+lNKhcsXoor1KQizUHhCuHugnquldrAR8UU5PNKU=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
 gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw=
 gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
 gitlab.com/elixxir/crypto v0.0.7-0.20210504210535-3077ddf9984d h1:E16E+gM2jJosFc8YmT2ISGxcfBThG2KAgsAcQXtxSIc=
 gitlab.com/elixxir/crypto v0.0.7-0.20210504210535-3077ddf9984d/go.mod h1:pbq80k+R7XXvjyWDqanD2eCJi1ClfESdKS0K8NndoLs=
+gitlab.com/elixxir/crypto v0.0.7-0.20210506223047-3196e4301110 h1:4KWUbx1RI5TABBM2omWl5MLW16dwySglz895X2rhSFQ=
+gitlab.com/elixxir/crypto v0.0.7-0.20210506223047-3196e4301110/go.mod h1:pbq80k+R7XXvjyWDqanD2eCJi1ClfESdKS0K8NndoLs=
 gitlab.com/elixxir/ekv v0.1.5 h1:R8M1PA5zRU1HVnTyrtwybdABh7gUJSCvt1JZwUSeTzk=
 gitlab.com/elixxir/ekv v0.1.5/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4=
 gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg=
diff --git a/interfaces/IsRunning.go b/interfaces/IsRunning.go
new file mode 100644
index 0000000000000000000000000000000000000000..950b842864712858b3d1dcf769f4765e5af86159
--- /dev/null
+++ b/interfaces/IsRunning.go
@@ -0,0 +1,8 @@
+package interfaces
+
+// this interface is used to allow the follower to to be stopped later if it
+// fails
+
+type Running interface{
+	IsRunning()bool
+}
diff --git a/network/follow.go b/network/follow.go
index 83e82ec0b2e882e7b432f7bbd117a0c505713f4a..71eee53edaf362fdad6cfdeb700b74cdf96fbf94 100644
--- a/network/follow.go
+++ b/network/follow.go
@@ -46,7 +46,7 @@ type followNetworkComms interface {
 
 // followNetwork polls the network to get updated on the state of nodes, the
 // round status, and informs the client when messages can be retrieved.
-func (m *manager) followNetwork(report interfaces.ClientErrorReport, quitCh <-chan struct{}) {
+func (m *manager) followNetwork(report interfaces.ClientErrorReport, quitCh <-chan struct{}, isRunning interfaces.Running) {
 	ticker := time.NewTicker(m.param.TrackNetworkPeriod)
 	TrackTicker := time.NewTicker(debugTrackPeriod)
 	rng := m.Rng.GetStream()
@@ -58,17 +58,23 @@ func (m *manager) followNetwork(report interfaces.ClientErrorReport, quitCh <-ch
 			rng.Close()
 			done = true
 		case <-ticker.C:
-			m.follow(report, rng, m.Comms)
+			m.follow(report, rng, m.Comms, isRunning)
 		case <-TrackTicker.C:
 			numPolls := atomic.SwapUint64(m.tracker, 0)
 			jww.INFO.Printf("Polled the network %d times in the "+
 				"last %s", numPolls, debugTrackPeriod)
 		}
+		if !isRunning.IsRunning(){
+			jww.ERROR.Printf("Killing network follower " +
+				"due to failed exit")
+			return
+		}
 	}
 }
 
 // executes each iteration of the follower
-func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, comms followNetworkComms) {
+func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source,
+	comms followNetworkComms, isRunning interfaces.Running) {
 
 	//get the identity we will poll for
 	identity, err := m.Session.Reception().GetIdentity(rng)
@@ -100,6 +106,11 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source,
 			identity.EndRequest, identity.EndRequest.Sub(identity.StartRequest), host.GetId())
 		return comms.SendPoll(host, &pollReq)
 	})
+	if !isRunning.IsRunning(){
+		jww.ERROR.Printf("Killing network follower " +
+			"due to failed exit")
+		return
+	}
 	if err != nil {
 		if report != nil {
 			report(
diff --git a/network/manager.go b/network/manager.go
index 31adb444767b544e7c6a62da9489631293dbdd8a..1cf065d691b44ca061404b426af7c26df965ca40 100644
--- a/network/manager.go
+++ b/network/manager.go
@@ -130,7 +130,7 @@ func (m *manager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppab
 
 	// Start the Network Tracker
 	trackNetworkStopper := stoppable.NewSingle("TrackNetwork")
-	go m.followNetwork(report, trackNetworkStopper.Quit())
+	go m.followNetwork(report, trackNetworkStopper.Quit(), trackNetworkStopper)
 	multi.Add(trackNetworkStopper)
 
 	// Message reception
diff --git a/network/message/sendCmix.go b/network/message/sendCmix.go
index 1b4f0e109ad3ea67078778c651856d299d2eb68b..2a7095843eb57c6f9af2af16ea9725fab0aac627 100644
--- a/network/message/sendCmix.go
+++ b/network/message/sendCmix.go
@@ -34,7 +34,7 @@ type sendCmixCommsInterface interface {
 }
 
 // 1.5 seconds
-const sendTimeBuffer = 1500 * time.Millisecond
+const sendTimeBuffer = 2500 * time.Millisecond
 
 // WARNING: Potentially Unsafe
 // Public manager function to send a message over CMIX
diff --git a/network/message/sendUnsafe.go b/network/message/sendUnsafe.go
index df7f05cb8df4ba368f3a3a19368dcb13214f7d49..19f7d5d5ce0bfe6dd14df77b76f0a21c824b2404 100644
--- a/network/message/sendUnsafe.go
+++ b/network/message/sendUnsafe.go
@@ -82,7 +82,7 @@ func (m *Manager) SendUnsafe(msg message.Send, param params.Unsafe) ([]id.Round,
 		return nil, errors.Errorf("Failed to send %v/%v sub payloads:"+
 			" %s", numFail, len(partitions), errRtn)
 	} else {
-		jww.INFO.Printf("Sucesfully Unsafe sent %d/%d to %s",
+		jww.INFO.Printf("Successfully Unsafe sent %d/%d to %s",
 			len(partitions)-numFail, len(partitions), msg.Recipient)
 	}
 
diff --git a/stoppable/single.go b/stoppable/single.go
index 8821db88eb4934a06db4f96484ef700b2c6beeff..2e8fa78a2a1c3f4f12752f045cb93c541da8412b 100644
--- a/stoppable/single.go
+++ b/stoppable/single.go
@@ -52,7 +52,6 @@ func (s *Single) Name() string {
 func (s *Single) Close(timeout time.Duration) error {
 	var err error
 	s.once.Do(func() {
-		atomic.StoreUint32(&s.running, 0)
 		timer := time.NewTimer(timeout)
 		select {
 		case <-timer.C:
@@ -61,6 +60,7 @@ func (s *Single) Close(timeout time.Duration) error {
 			err = errors.Errorf("%s failed to close", s.name)
 		case s.quit <- struct{}{}:
 		}
+		atomic.StoreUint32(&s.running, 0)
 	})
 	return err
 }
diff --git a/storage/utility/blockStore.go b/storage/utility/blockStore.go
index a405e9b966175b77f8a9803e2efbe72bf2cf27af..b29dcd12d56037d6e7d0622b1fbc47f8faea62b9 100644
--- a/storage/utility/blockStore.go
+++ b/storage/utility/blockStore.go
@@ -21,6 +21,7 @@ const (
 const (
 	bsBuffLengthErr   = "length of buffer %d != %d expected"
 	bsKvSaveErr       = "failed to save blockStore to KV: %+v"
+	bsKvInitSaveErr   = "failed to save initial block: %+v"
 	bsKvLoadErr       = "failed to get BlockStore from storage: %+v"
 	bsKvUnmarshalErr  = "failed to unmarshal BlockStore loaded from storage: %+v"
 	bJsonMarshalErr   = "failed to JSON marshal block %d: %+v"
@@ -218,6 +219,12 @@ func (bs *BlockStore) save() error {
 		return errors.Errorf(bsKvSaveErr, err)
 	}
 
+	// Save initial block
+	err = bs.saveBlock()
+	if err != nil {
+		return errors.Errorf(bsKvInitSaveErr, err)
+	}
+
 	return nil
 }