diff --git a/data.go b/data.go
index 4f63058..aeb0203 100644
--- a/data.go
+++ b/data.go
@@ -474,7 +474,6 @@
 		} else {
 			// first start - no row, generate a UUID and store it
 			err = nil
-			newInstanceID = true
 			info.InstanceID = GenerateUUID()
 
 			log.Debugf("Inserting new apid instance id %s", info.InstanceID)
@@ -484,7 +483,6 @@
 	} else if savedClusterId != info.ClusterID {
 		log.Debug("Detected apid cluster id change in config.  Apid will start clean")
 		err = nil
-		newInstanceID = true
 		info.InstanceID = GenerateUUID()
 
 		db.Exec("REPLACE INTO APID (instance_id, apid_cluster_id, last_snapshot_info) VALUES (?,?,?)",
diff --git a/init.go b/init.go
index e4be5aa..3ad221e 100644
--- a/init.go
+++ b/init.go
@@ -49,7 +49,6 @@
 	dataService         apid.DataService
 	events              apid.EventsService
 	apidInfo            apidInstanceInfo
-	newInstanceID       bool
 	apidTokenManager    TokenManagerInterface
 	apidChangeManager   changeManagerInterface
 	apidSnapshotManager snapShotManagerInterface
diff --git a/token.go b/token.go
index f10fff8..991463c 100644
--- a/token.go
+++ b/token.go
@@ -66,6 +66,7 @@
 	returnTokenChan     chan *OauthToken
 	invalidateDone      chan bool
 	dbm                 dbManagerInterface
+	notNewInstanceId    bool
 }
 
 func (t *tokenManager) start() {
@@ -167,7 +168,7 @@
 		req.Header.Set("status", "ONLINE")
 		req.Header.Set("plugin_details", apidPluginDetails)
 
-		if newInstanceID {
+		if !t.notNewInstanceId {
 			req.Header.Set("created_at_apid", time.Now().Format(time.RFC3339))
 		} else {
 			req.Header.Set("updated_at_apid", time.Now().Format(time.RFC3339))
@@ -208,8 +209,8 @@
 
 		log.Debugf("Got new token: %#v", token)
 
-		if newInstanceID {
-			newInstanceID = false
+		if !t.notNewInstanceId {
+			t.notNewInstanceId = true
 			err = t.dbm.updateApidInstanceInfo()
 			if err != nil {
 				log.Errorf("unable to unmarshal update apid instance info : %v", string(body), err)
diff --git a/token_test.go b/token_test.go
index 66cd189..4a0c3e6 100644
--- a/token_test.go
+++ b/token_test.go
@@ -25,6 +25,9 @@
 
 	"encoding/json"
 
+	"database/sql"
+	"github.com/30x/apid-core"
+	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 )
@@ -94,7 +97,7 @@
 				w.Write(body)
 			}))
 			config.Set(configProxyServerBaseURI, ts.URL)
-			testedTokenManager := createTokenManager()
+			testedTokenManager := createTokenManager(&dummyDbMan{})
 			testedTokenManager.start()
 			token := testedTokenManager.getToken()
 
@@ -123,7 +126,7 @@
 			}))
 			config.Set(configProxyServerBaseURI, ts.URL)
 
-			testedTokenManager := createTokenManager()
+			testedTokenManager := createTokenManager(&dummyDbMan{})
 			testedTokenManager.start()
 			token := testedTokenManager.getToken()
 			Expect(token.AccessToken).ToNot(BeEmpty())
@@ -163,7 +166,7 @@
 			}))
 
 			config.Set(configProxyServerBaseURI, ts.URL)
-			testedTokenManager := createTokenManager()
+			testedTokenManager := createTokenManager(&dummyDbMan{})
 			testedTokenManager.start()
 			testedTokenManager.getToken()
 
@@ -179,17 +182,13 @@
 			finished := make(chan bool, 1)
 			count := 0
 
-			newInstanceID = true
-
 			ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 
 				count++
 				if count == 1 {
-					Expect(newInstanceID).To(BeTrue())
 					Expect(r.Header.Get("created_at_apid")).NotTo(BeEmpty())
 					Expect(r.Header.Get("updated_at_apid")).To(BeEmpty())
 				} else {
-					Expect(newInstanceID).To(BeFalse())
 					Expect(r.Header.Get("created_at_apid")).To(BeEmpty())
 					Expect(r.Header.Get("updated_at_apid")).NotTo(BeEmpty())
 					finished <- true
@@ -204,7 +203,7 @@
 			}))
 
 			config.Set(configProxyServerBaseURI, ts.URL)
-			testedTokenManager := createTokenManager()
+			testedTokenManager := createTokenManager(&dummyDbMan{})
 			testedTokenManager.start()
 			testedTokenManager.getToken()
 			testedTokenManager.invalidateToken()
@@ -216,3 +215,43 @@
 		}, 3)
 	})
 })
+
+type dummyDbMan struct{}
+
+func (d *dummyDbMan) initDefaultDb() error {
+	return nil
+}
+func (d *dummyDbMan) setDb(apid.DB) {}
+func (d *dummyDbMan) getDb() apid.DB {
+	return nil
+}
+func (d *dummyDbMan) insert(tableName string, rows []common.Row, txn *sql.Tx) bool {
+	return true
+}
+func (d *dummyDbMan) deleteRowsFromTable(tableName string, rows []common.Row, txn *sql.Tx) bool {
+	return true
+}
+func (d *dummyDbMan) update(tableName string, oldRows, newRows []common.Row, txn *sql.Tx) bool {
+	return true
+}
+func (d *dummyDbMan) getPkeysForTable(tableName string) ([]string, error) {
+	return nil, nil
+}
+func (d *dummyDbMan) findScopesForId(configId string) []string {
+	return nil
+}
+func (d *dummyDbMan) getDefaultDb() (apid.DB, error) {
+	return nil, nil
+}
+func (d *dummyDbMan) updateApidInstanceInfo() error {
+	return nil
+}
+func (d *dummyDbMan) getApidInstanceInfo() (info apidInstanceInfo, err error) {
+	return
+}
+func (d *dummyDbMan) getLastSequence() string {
+	return ""
+}
+func (d *dummyDbMan) updateLastSequence(lastSequence string) error {
+	return nil
+}
