diff --git a/apigee_sync.go b/apigee_sync.go
index a065389..6c63a14 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -94,7 +94,7 @@
 	 * Check to see if we have lastSequence already saved in the DB,
 	 * in which case, it has to be used to prevent re-reading same data
 	 */
-	lastSequence = findLastSeqInfo(gapidConfigId)
+	lastSequence = findapidConfigInfo("lastSequence")
 	for {
 		log.Debug("polling...")
 		if tokenActive == false {
@@ -281,7 +281,7 @@
 	 * Skip Downloading snapshot, if there is already a snapshot
 	 * available from previous run of APID
 	 */
-	gsnapshotInfo = findSnapshotInfo(gapidConfigId)
+	gsnapshotInfo = findapidConfigInfo("snapshotInfo")
 	if gsnapshotInfo != "" {
 		downloadDataSnapshot = true
 		downloadBootSnapshot = true
@@ -440,40 +440,17 @@
 }
 
 /*
- * Retrieve LastSequence for the given apidConfigId from apid_config table
- */
-func findLastSeqInfo(configId string) (info string) {
-
-	db, err := data.DB()
-	if err != nil {
-		log.Errorf("DB open Error: %s", err)
-		return ""
-	}
-
-	rows, err := db.Query("select lastSequence from APID_CONFIG where id = $1", configId)
-	if err != nil {
-		log.Errorf("Failed to query APID_CONFIG. Err: %s", err)
-		return ""
-	}
-	defer rows.Close()
-	for rows.Next() {
-		rows.Scan(&info)
-	}
-	return info
-}
-
-/*
  * Retrieve SnapshotInfo for the given apidConfigId from apid_config table
  */
-func findSnapshotInfo(configId string) (info string) {
+func findapidConfigInfo(qparam string) (info string) {
 
 	db, err := data.DB()
 	if err != nil {
 		log.Errorf("DB open Error: %s", err)
 		return ""
 	}
-
-	rows, err := db.Query("select snapshotInfo from APID_CONFIG where id = $1", configId)
+	query := "select " + qparam + " from APID_CONFIG"
+	rows, err := db.Query(query)
 	if err != nil {
 		log.Errorf("Failed to query APID_CONFIG. Err: %s", err)
 		return ""
@@ -500,14 +477,14 @@
 		log.Error("Unable to create Sqlite transaction")
 		return false
 	}
-	prep, err := txn.Prepare("UPDATE APID_CONFIG SET lastSequence=$1 WHERE id=$2;")
+	prep, err := txn.Prepare("UPDATE APID_CONFIG SET lastSequence=$1;")
 	if err != nil {
 		log.Error("INSERT APID_CONFIG Failed: ", err)
 		return false
 	}
 	defer prep.Close()
 	s := txn.Stmt(prep)
-	_, err = s.Exec(lastChange, gapidConfigId)
+	_, err = s.Exec(lastChange)
 	s.Close()
 	if err != nil {
 		log.Error("UPDATE APID_CONFIG_SCOPE Failed: ", err)
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index d6825b3..2fa9e9a 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -53,6 +53,7 @@
 				err = json.Unmarshal(plinfo, &plugInfo)
 				Expect(err).NotTo(HaveOccurred())
 				Expect(plugInfo[0].Name).To(Equal("apidApigeeSync"))
+				Expect(plugInfo[0].SchemaVersion).To(Equal("0.0.1"))
 
 				res := oauthTokenResp{}
 				res.AccessToken = "accesstoken"
diff --git a/init.go b/init.go
index dd290c1..b6fe63a 100644
--- a/init.go
+++ b/init.go
@@ -47,7 +47,7 @@
 	if numRead != len(buff) || err != nil {
 		panic(err)
 	}
-	return fmt.Sprintf("%x-%x-%x-%x-%x-%x\n", unix32bits, buff[0:2], buff[2:4], buff[4:6], buff[6:8], buff[8:])
+	return fmt.Sprintf("%x-%x-%x-%x-%x-%x", unix32bits, buff[0:2], buff[2:4], buff[4:6], buff[6:8], buff[8:])
 }
 
 func init() {
@@ -103,7 +103,10 @@
 	config = services.Config()
 	data = services.Data()
 	events = services.Events()
-	guuid = generate_uuid()
+	guuid = findapidConfigInfo("instance_id")
+	if guuid == "" {
+		guuid = generate_uuid()
+	}
 
 	/* If The Instance has no name configured, just re-use UUID */
 	ginstName = config.GetString(configName)
@@ -150,6 +153,7 @@
 	_, err := db.Exec(`
 CREATE TABLE apid_config (
     id text,
+    instance_id text,
     name text,
     description text,
     umbrella_org_app_name text,
diff --git a/listener.go b/listener.go
index 32a1d94..b924c76 100644
--- a/listener.go
+++ b/listener.go
@@ -100,7 +100,7 @@
 	var scope, id, name, orgAppName, createdBy, updatedBy, Description string
 	var updated, created int64
 
-	prep, err := txn.Prepare("INSERT INTO APID_CONFIG (id, _apid_scope, name, umbrella_org_app_name, created, created_by, updated, updated_by, snapshotInfo)VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9);")
+	prep, err := txn.Prepare("INSERT INTO APID_CONFIG (id, instance_id, _apid_scope, name, umbrella_org_app_name, created, created_by, updated, updated_by, snapshotInfo)VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);")
 	if err != nil {
 		log.Error("INSERT APID_CONFIG Failed: ", err)
 		return false
@@ -121,6 +121,7 @@
 		s := txn.Stmt(prep)
 		_, err = s.Exec(
 			id,
+			guuid,
 			scope,
 			name,
 			orgAppName,
