diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index f705495..96a780a 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -109,8 +109,6 @@
 					Expect(seq).To(Equal(cl.LastSequence))
 
 					tokenManager.close()
-					//sleep to ensure tokenManager has closed.  t.close() is non blocking
-					time.Sleep(1500 * time.Millisecond)
 					close(done)
 				})
 			}
@@ -146,8 +144,6 @@
 				Expect(s.Tables).To(BeNil())
 
 				tokenManager.close()
-				//sleep to ensure tokenManager has closed.  t.close() is non blocking
-				time.Sleep(1500 * time.Millisecond)
 				close(done)
 			}
 		})
diff --git a/token.go b/token.go
index a1a1263..e461e70 100644
--- a/token.go
+++ b/token.go
@@ -14,6 +14,7 @@
 var (
 	refreshFloatTime = time.Minute
 	getTokenLock     sync.Mutex
+	quitPollingForToken chan bool = make(chan bool)
 )
 
 /*
@@ -28,6 +29,7 @@
 func createTokenManager() *tokenMan {
 	t := &tokenMan{}
 	t.doRefresh = make(chan bool, 1)
+	t.continueMaintenance = true
 	t.maintainToken()
 	return t
 }
@@ -35,6 +37,7 @@
 type tokenMan struct {
 	token     *oauthToken
 	doRefresh chan bool
+	continueMaintenance bool
 }
 
 func (t *tokenMan) getBearerToken() string {
@@ -43,13 +46,12 @@
 
 func (t *tokenMan) maintainToken() {
 	go func() {
+		t.getToken()
 		for {
-			if t.token.needsRefresh() {
-				getTokenLock.Lock()
-				t.retrieveNewToken()
-				getTokenLock.Unlock()
-			}
 			select {
+			case <- quitPollingForToken:
+				log.Info("Signal to quit maintenance of token recieved")
+				return
 			case _, ok := <-t.doRefresh:
 				if !ok {
 					log.Debug("closed tokenMan")
@@ -59,6 +61,12 @@
 			case <-time.After(t.token.refreshIn()):
 				log.Debug("auto refresh token")
 			}
+
+			if t.token.needsRefresh() && t.continueMaintenance{
+				getTokenLock.Lock()
+				t.retrieveNewToken()
+				getTokenLock.Unlock()
+			}
 		}
 	}()
 }
@@ -85,8 +93,9 @@
 
 func (t *tokenMan) close() {
 	log.Debug("close token manager")
+	quitPollingForToken <- true
 	close(t.doRefresh)
-
+	t.continueMaintenance = false
 }
 
 // don't call externally. will block until success.
@@ -100,7 +109,7 @@
 	}
 	uri.Path = path.Join(uri.Path, "/accesstoken")
 
-	pollWithBackoff(nil, t.getRetrieveNewTokenClosure(uri), func(err error) {log.Errorf("Error getting new token : ", err)})
+	pollWithBackoff(quitPollingForToken, t.getRetrieveNewTokenClosure(uri), func(err error) {log.Errorf("Error getting new token : ", err)})
 }
 
 func (t *tokenMan) getRetrieveNewTokenClosure(uri *url.URL) func(chan bool) error {
diff --git a/token_test.go b/token_test.go
index d4d5e07..4fbd0b0 100644
--- a/token_test.go
+++ b/token_test.go
@@ -65,7 +65,7 @@
 	Context("tokenMan", func() {
 
 		It("should get a valid token", func() {
-
+log.Info("\n\n\n\nHERE\n\n")
 			tokenManager = createTokenManager()
 			token := tokenManager.getToken()
 
@@ -76,14 +76,11 @@
 			bToken := tokenManager.getBearerToken()
 			Expect(bToken).To(Equal(token.AccessToken))
 			tokenManager.close()
-			//sleep to ensure tokenManager has closed.  t.close() is non blocking
-			time.Sleep(1500 * time.Millisecond)
 		}, 2)
 
 		It("should refresh when forced to", func() {
 
 			tokenManager = createTokenManager()
-
 			token := tokenManager.getToken()
 			Expect(token.AccessToken).ToNot(BeEmpty())
 
@@ -93,8 +90,6 @@
 			Expect(token).ToNot(Equal(token2))
 			Expect(token.AccessToken).ToNot(Equal(token2.AccessToken))
 			tokenManager.close()
-			//sleep to ensure tokenManager has closed.  t.close() is non blocking
-			time.Sleep(1500 * time.Millisecond)
 		}, 2)
 
 		It("should refresh in refresh interval", func(done Done) {
@@ -130,8 +125,6 @@
 			<-finished
 
 			tokenManager.close()
-			//sleep to ensure tokenManager has closed.  t.close() is non blocking
-			time.Sleep(1500 * time.Millisecond)
 			ts.Close()
 
 			close(done)
@@ -173,8 +166,6 @@
 			tokenManager.getToken()
 			<-finished
 			tokenManager.close()
-			//sleep to ensure tokenManager has closed.  t.close() is non blocking
-			time.Sleep(1500 * time.Millisecond)
 			ts.Close()
 			close(done)
 		}, 2)
