Fix newInstanceID
diff --git a/data.go b/data.go
index c532bf1..2531c8d 100644
--- a/data.go
+++ b/data.go
@@ -251,8 +251,8 @@
 		} else {
 			// first start - no row, generate a UUID and store it
 			err = nil
+			newInstanceID = true
 			info.InstanceID = generateUUID()
-			updateApidInstanceInfo()
 
 			db.Exec("INSERT INTO APID (instance_id) VALUES (?)", info.InstanceID)
 		}
diff --git a/init.go b/init.go
index 8ecc940..d16b24a 100644
--- a/init.go
+++ b/init.go
@@ -78,8 +78,6 @@
 	data = services.Data()
 	events = services.Events()
 
-	tokenManager = createTokenManager()
-
 	/* This callback function will get called, once all the plugins are
 	 * initialized (not just this plugin). This is needed because,
 	 * downloadSnapshots/changes etc have to begin to be processed only
@@ -120,6 +118,8 @@
 	}
 	config.Set(configApidInstanceID, apidInfo.InstanceID)
 
+	tokenManager = createTokenManager()
+
 	log.Debug("end init")
 
 	return pluginData, nil
diff --git a/token.go b/token.go
index cca8963..4561812 100644
--- a/token.go
+++ b/token.go
@@ -151,7 +151,7 @@
 		var token oauthToken
 		err = json.Unmarshal(body, &token)
 		if err != nil {
-			log.Error("unable to unmarshal JSON response %s: %v", string(body), err)
+			log.Errorf("unable to unmarshal JSON response '%s': %v", string(body), err)
 			continue
 		}
 
@@ -164,6 +164,11 @@
 
 		log.Debugf("Got new token: %#v", token)
 
+		if newInstanceID {
+			newInstanceID = false
+			updateApidInstanceInfo()
+		}
+
 		t.token = &token
 		config.Set(configBearerToken, token.AccessToken)
 		return
diff --git a/token_test.go b/token_test.go
index 24bd13a..5deec1c 100644
--- a/token_test.go
+++ b/token_test.go
@@ -91,7 +91,6 @@
 				defer GinkgoRecover()
 
 				count++
-
 				if count > 1 {
 					if start.Add(500).After(time.Now()) {
 						Fail("didn't refresh within expected interval")
@@ -109,6 +108,7 @@
 			}))
 			defer ts.Close()
 
+			tokenManager.getToken()
 			tokenManager.close()
 			oldBase := config.Get(configProxyServerBaseURI)
 			config.Set(configProxyServerBaseURI, ts.URL)
@@ -125,5 +125,51 @@
 			<-finished
 			close(done)
 		})
+
+		It("should have created_at_apid first time, update_at_apid after", func(done Done) {
+
+			finished := make(chan bool)
+			var tm *tokenMan
+			count := 0
+			ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+				defer GinkgoRecover()
+
+				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
+				}
+				res := oauthToken{
+					AccessToken: string(count),
+					ExpiresIn:   2000,
+				}
+				body, err := json.Marshal(res)
+				Expect(err).NotTo(HaveOccurred())
+				w.Write(body)
+			}))
+			defer ts.Close()
+
+			tokenManager.getToken()
+			tokenManager.close()
+			oldBase := config.Get(configProxyServerBaseURI)
+			config.Set(configProxyServerBaseURI, ts.URL)
+			defer func() {
+				tm.close()
+				config.Set(configProxyServerBaseURI, oldBase)
+				tokenManager = createTokenManager()
+			}()
+
+			newInstanceID = true
+			tm = createTokenManager()
+			tm.invalidateToken()
+			<-finished
+			close(done)
+		})
 	})
 })