diff --git a/.gitignore b/.gitignore
index 54e1ced..f47e206 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
 profile.out
 cover.html
 coverage.txt
+.idea
+*.lock
+*.iml
diff --git a/api.go b/api.go
index 1aae5b6..e31d841 100644
--- a/api.go
+++ b/api.go
@@ -6,6 +6,7 @@
 	"fmt"
 	"net/http"
 	"net/url"
+	"github.com/30x/apid"
 )
 
 type sucResponseDetail struct {
@@ -51,7 +52,7 @@
 	}
 
 	f := r.Form
-	elems := []string{"action", "key", "uriPath", "organization", "environment"}
+	elems := []string{"action", "key", "uriPath", "scopeuuid"}
 	for _, elem := range elems {
 		if f.Get(elem) == "" {
 			w.WriteHeader(http.StatusBadRequest)
@@ -75,30 +76,63 @@
 // returns []byte to be written to client
 func verifyAPIKey(f url.Values) ([]byte, error) {
 
-	db := getDB()
 
 	key := f.Get("key")
-	org := f.Get("organization")
+	scopeuuid := f.Get("scopeuuid")
 	path := f.Get("uriPath")
-	env := f.Get("environment")
 	action := f.Get("action")
 
-	if key == "" || org == "" || path == "" || env == "" || action != "verify" {
+	if key == "" || scopeuuid == "" || path == "" || action != "verify" {
 		log.Error("Input params Invalid/Incomplete")
 		reason := "Input Params Incomplete or Invalid"
 		errorCode := "INCORRECT_USER_INPUT"
 		return errorResponse(reason, errorCode)
 	}
 
-	sSql := "SELECT ap.api_resources, ap.environments, c.issued_at, c.status, a.callback_url, d.username, d.id FROM APP_CREDENTIAL AS c INNER JOIN APP AS a ON c.app_id = a.id INNER JOIN DEVELOPER AS d ON a.developer_id = d.id INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp ON mp.appcred_id = c.id INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id WHERE (UPPER(d.status) = 'ACTIVE' AND mp.apiprdt_id = ap.id AND mp.app_id = a.id AND mp.appcred_id = c.id AND UPPER(mp.status) = 'APPROVED' AND UPPER(a.status) = 'APPROVED' AND c.id = '" + key + "' AND c._apid_scope = '" + org + "');"
+	var env, tenantId string
+	{
+		db, err := apid.Data().DB();
+		switch {
+		case err != nil:
+			reason := err.Error()
+			errorCode := "SEARCH_INTERNAL_ERROR"
+			return errorResponse(reason, errorCode)
+		}
+
+		error := db.QueryRow("SELECT env, scope FROM DATA_SCOPE WHERE id = ?;", scopeuuid).Scan(&env, &tenantId)
+
+		switch {
+		case error == sql.ErrNoRows:
+			reason := "ENV Validation Failed"
+			errorCode := "ENV_VALIDATION_FAILED"
+			return errorResponse(reason, errorCode)
+		case error != nil:
+			reason := error.Error()
+			errorCode := "SEARCH_INTERNAL_ERROR"
+			return errorResponse(reason, errorCode)
+		}
+	}
+
+	db := getDB()
+
+	log.Debug("Found tenant_id='", tenantId, "' with env='", env, "' for scopeuuid='", scopeuuid,"'")
+
+	sSql := "SELECT ap.api_resources, ap.environments, c.issued_at, c.status, a.callback_url, d.username, d.id " +
+		"FROM APP_CREDENTIAL AS c INNER JOIN APP AS a ON c.app_id = a.id " +
+		"INNER JOIN DEVELOPER AS d ON a.developer_id = d.id " +
+		"INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp ON mp.appcred_id = c.id " +
+		"INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id " +
+		"WHERE (UPPER(d.status) = 'ACTIVE' AND mp.apiprdt_id = ap.id AND mp.app_id = a.id " +
+		"AND mp.appcred_id = c.id AND UPPER(mp.status) = 'APPROVED' AND UPPER(a.status) = 'APPROVED' " +
+		"AND c.id = $1 AND c.tenant_id = $2);"
 
 	var status, redirectionURIs, developerAppName, developerId, resName, resEnv string
 	var issuedAt int64
-	err := db.QueryRow(sSql).Scan(&resName, &resEnv, &issuedAt, &status,
+	err := db.QueryRow(sSql, key, tenantId).Scan(&resName, &resEnv, &issuedAt, &status,
 		&redirectionURIs, &developerAppName, &developerId)
 	switch {
 	case err == sql.ErrNoRows:
-		reason := "API Key verify failed for (" + key + ", " + org + ", " + path + ", " + env + ")"
+		reason := "API Key verify failed for (" + key + ", " + scopeuuid + ", " + path + ")"
 		errorCode := "REQ_ENTRY_NOT_FOUND"
 		return errorResponse(reason, errorCode)
 
diff --git a/api_test.go b/api_test.go
index 50e6107..369d540 100644
--- a/api_test.go
+++ b/api_test.go
@@ -19,8 +19,7 @@
 			v := url.Values{
 				"key": []string{"credential_x"},
 				"uriPath": []string{"/test"},
-				"environment": []string{"Env_0"},
-				"organization": []string{"Org_0"},
+				"scopeuuid": []string{"ABCDE"},
 				"action": []string{"verify"},
 			}
 			rsp, err := verifyAPIKey(v)
@@ -62,8 +61,7 @@
 				v := url.Values{
 					"key": []string{"app_credential_"+resulti},
 					"uriPath": []string{"/test"},
-					"environment": []string{"Env_0"},
-					"organization": []string{"Org_0"},
+					"scopeuuid": []string{"ABCDE"},
 					"action": []string{"verify"},
 				}
 				rsp, err := verifyAPIKey(v)
@@ -85,9 +83,8 @@
 			uri.Path = apiPath
 
 			v := url.Values{}
-			v.Add("organization", "Org_0")
 			v.Add("key", "credential_x")
-			v.Add("environment", "Env_0")
+			v.Add("scopeuuid", "ABCDE")
 			v.Add("uriPath", "/test")
 			v.Add("action", "verify")
 
@@ -113,9 +110,8 @@
 			uri.Path = apiPath
 
 			v := url.Values{}
-			v.Add("organization", "Org_0")
 			v.Add("key", "app_credential_1")
-			v.Add("environment", "Env_0")
+			v.Add("scopeuuid", "ABCDE")
 			v.Add("uriPath", "/test")
 			v.Add("action", "verify")
 
@@ -131,6 +127,7 @@
 			body, err := ioutil.ReadAll(res.Body)
 			Expect(err).ShouldNot(HaveOccurred())
 			json.Unmarshal(body, &respj)
+			log.Info("Result test",respj)
 			Expect(respj.Type).Should(Equal("APIKeyContext"))
 			Expect(respj.RspInfo.Key).Should(Equal("app_credential_1"))
 		})
diff --git a/apidVerifyAPIKey-api.yaml b/apidVerifyAPIKey-api.yaml
index 04f0335..f0a1841 100644
--- a/apidVerifyAPIKey-api.yaml
+++ b/apidVerifyAPIKey-api.yaml
@@ -88,6 +88,7 @@
       - action
       - key
       - uriPath
+      - scopeuuid
     properties:
       action:
         enum:
@@ -96,6 +97,8 @@
         type: string
       uriPath:
         type: string
+      scopeuuid:
+        type: string
 
   VerifyAPIKeyResponse:
     type: object
diff --git a/init.go b/init.go
index ad04f1c..a475420 100644
--- a/init.go
+++ b/init.go
@@ -59,7 +59,7 @@
     description text,
     api_resources text[],
     approval_type text,
-    _apid_scope text,
+    _change_selector text,
     proxies text[],
     environments text[],
     quota text,
@@ -81,7 +81,7 @@
     status text,
     encrypted_password text,
     salt text,
-    _apid_scope text,
+    _change_selector text,
     created_at int64,
     created_by text,
     updated_at int64,
@@ -98,7 +98,7 @@
     created_by text,
     updated_at int64,
     updated_by text,
-    _apid_scope text,
+    _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
 CREATE TABLE IF NOT EXISTS company_developer (
@@ -110,7 +110,7 @@
     created_by text,
     updated_at int64,
     updated_by text,
-    _apid_scope text,
+    _change_selector text,
     PRIMARY KEY (tenant_id, company_id,developer_id)
 );
 CREATE TABLE IF NOT EXISTS app (
@@ -129,7 +129,7 @@
     created_by text,
     updated_at int64,
     updated_by text,
-    _apid_scope text,
+    _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
 CREATE TABLE IF NOT EXISTS app_credential (
@@ -142,7 +142,7 @@
     issued_at int64,
     expires_at int64,
     app_status text,
-    _apid_scope text,
+    _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
 CREATE TABLE IF NOT EXISTS app_credential_apiproduct_mapper (
@@ -150,7 +150,7 @@
     appcred_id text,
     app_id text,
     apiprdt_id text,
-    _apid_scope text,
+    _change_selector text,
     status text,
     PRIMARY KEY (appcred_id, app_id, apiprdt_id,tenant_id)
 );
@@ -159,3 +159,41 @@
 		log.Panic("Unable to initialize DB", err)
 	}
 }
+
+
+func createApidClusterTables(db apid.DB) {
+	_, err := db.Exec(`
+CREATE TABLE apid_cluster (
+    id text,
+    instance_id text,
+    name text,
+    description text,
+    umbrella_org_app_name text,
+    created int64,
+    created_by text,
+    updated int64,
+    updated_by text,
+    _change_selector text,
+    snapshotInfo text,
+    lastSequence text,
+    PRIMARY KEY (id)
+);
+CREATE TABLE data_scope (
+    id text,
+    apid_cluster_id text,
+    scope text,
+    org text,
+    env text,
+    created int64,
+    created_by text,
+    updated int64,
+    updated_by text,
+    _change_selector text,
+    PRIMARY KEY (id)
+);
+`)
+	if err != nil {
+		log.Panic("Unable to initialize DB", err)
+	}
+}
+
diff --git a/kmsDataTest.sql b/kmsDataTest.sql
new file mode 100644
index 0000000..e73accd
--- /dev/null
+++ b/kmsDataTest.sql
@@ -0,0 +1,60 @@
+
+INSERT INTO "kms"."customer" (id,name,display_name,description,created_at,created_by,updated_at,updated_by) VALUES
+('f8c9ffd6-a234-4723-bd2a-68379df33ff0' /*not nullable*/,'s' /*not nullable*/,'s','s','2016-12-16 16:38:16.593',
+'s' /*not nullable*/,'2016-12-16 16:38:16.593','s' /*not nullable*/);
+
+
+INSERT INTO "kms"."organization" (id,name,tenant_id,customer_id,description,created_at,created_by,updated_at,updated_by) VALUES
+('f8c9ffd6-a234-4723-bd2a-68379df33ff1' /*not nullable*/,'5cfc6415' /*not nullable*/,'5cfc6415' /*not nullable*/,'
+f8c9ffd6-a234-4723-bd2a-68379df33ff0' /*not nullable*/,'5cfc6415',
+'2016-12-16 16:36:49.407','s','2016-12-16 16:36:49.407','s');
+
+INSERT INTO "kms"."developer"
+(id,tenant_id,
+username,first_name,last_name,password,email,
+status,encrypted_password,salt,
+created_at,created_by,updated_at,updated_by,_change_selector) VALUES
+('f8c9ffd6-a234-4723-bd2a-68379df33fff','5cfc6415','Dev1','Alex' /*not nullable*/,'Khimich' /*not nullable*/,
+'Passwd','alexkhimich+edgex@google.com' /*not nullable*/,
+'ACTIVE','s','s',now(),'sql',now(),'sql','5cfc6415');
+
+INSERT INTO "kms"."api_product"
+(id,tenant_id,name,display_name,description,
+api_resources,approval_type,scopes,proxies,environments,
+quota,quota_time_unit,quota_interval,
+created_at,created_by,updated_at,updated_by,_change_selector) VALUES
+('f8c9ffd6-a234-4723-bd2a-68379df33ff2' /*not nullable*/,'5cfc6415' /*not nullable*/,'Product1' /*not nullable*/,'Product1','s',
+'{/**}','AUTO','{""}','{iloveapis}','{prod,test}',
+'s','s',0,
+'2016-12-16 16:39:11.596','s' ,'2016-12-16 16:39:11.596','s' /*not nullable*/,'5cfc6415' /*not nullable*/);
+
+INSERT INTO "kms"."app"
+(id,tenant_id,name,display_name,
+access_type,callback_url,status,app_family,
+company_id,developer_id,parent_id,
+type,
+created_at,created_by,updated_at,updated_by,_change_selector) VALUES
+('f8c9ffd6-a234-4723-bd2a-68379df33ff3' /*not nullable*/,'5cfc6415' /*not nullable*/,'App1' /*not nullable*/,'App1',
+'s','s','APPROVED','default',
+NULL,'f8c9ffd6-a234-4723-bd2a-68379df33fff','f8c9ffd6-a234-4723-bd2a-68379df33fff' /*not nullable*/,
+'DEVELOPER',
+'2016-12-16 16:43:56.839','s' ,'2016-12-16 16:43:56.839','s' /*not nullable*/,'5cfc6415' /*not nullable*/);
+
+INSERT INTO "kms"."app_credential"
+(id,tenant_id,consumer_secret,app_id,
+method_type,status,
+issued_at,expires_at,app_status,scopes,
+created_at,created_by,updated_at,updated_by,_change_selector) VALUES
+('E1HbT0ecxK1M7CMTsJ4TvAzWLTrF3zB9', '5cfc6415', 'DER234','f8c9ffd6-a234-4723-bd2a-68379df33ff3',
+NULL,'APPROVED','2016-12-16 16:46:50.590',NULL,NULL,'{}','2016-12-16 16:46:50.590','s' ,'2016-12-16 16:46:50.590','s' ,'5cfc6415' );
+
+
+
+INSERT INTO "kms"."app_credential_apiproduct_mapper"
+(tenant_id,appcred_id,app_id,apiprdt_id,
+status,_change_selector) VALUES
+('5cfc6415','E1HbT0ecxK1M7CMTsJ4TvAzWLTrF3zB9','f8c9ffd6-a234-4723-bd2a-68379df33ff3','f8c9ffd6-a234-4723-bd2a-68379df33ff2'
+,'APPROVED','5cfc6415' );
+
+curl -s -d "key=E1HbT0ecxK1M7CMTsJ4TvAzWLTrF3zB9&scopeuuid=9356ba25-38df-4e72-bb4d-f974ce9683d6&uriPath=/&action=verify"
+"http://localhost:9090/verifiers/apikey" | python -m json.tool
diff --git a/listener.go b/listener.go
index e9398cd..b2e3f34 100644
--- a/listener.go
+++ b/listener.go
@@ -87,14 +87,14 @@
 	var scope, id, appId, consumerSecret, appstatus, status, tenantId string
 	var issuedAt int64
 
-	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL (_apid_scope, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
+	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL (_change_selector, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
 	if err != nil {
 		log.Error("INSERT Cred Failed: ", err)
 		return false
 	}
 	defer prep.Close()
 	for _, ele := range rows {
-		ele.Get("_apid_scope", &scope)
+		ele.Get("_change_selector", &scope)
 		ele.Get("id", &id)
 		ele.Get("app_id", &appId)
 		ele.Get("consumer_secret", &consumerSecret)
@@ -130,7 +130,7 @@
 	var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
 	var CreatedAt, LastModifiedAt int64
 
-	prep, err := txn.Prepare("INSERT INTO APP (_apid_scope, id, developer_id,callback_url,status, name, app_family, created_at, created_by,updated_at, updated_by,tenant_id) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
+	prep, err := txn.Prepare("INSERT INTO APP (_change_selector, id, developer_id,callback_url,status, name, app_family, created_at, created_by,updated_at, updated_by,tenant_id) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
 	if err != nil {
 		log.Error("INSERT APP Failed: ", err)
 		return false
@@ -139,7 +139,7 @@
 	defer prep.Close()
 	for _, ele := range rows {
 
-		ele.Get("_apid_scope", &scope)
+		ele.Get("_change_selector", &scope)
 		ele.Get("id", &EntityIdentifier)
 		ele.Get("developer_id", &DeveloperId)
 		ele.Get("callback_url", &CallbackUrl)
@@ -185,7 +185,7 @@
 	var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
 	var CreatedAt, LastModifiedAt int64
 
-	prep, err := txn.Prepare("INSERT INTO DEVELOPER (_apid_scope,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
+	prep, err := txn.Prepare("INSERT INTO DEVELOPER (_change_selector,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
 	if err != nil {
 		log.Error("INSERT DEVELOPER Failed: ", err)
 		return false
@@ -194,7 +194,7 @@
 	defer prep.Close()
 	for _, ele := range rows {
 
-		ele.Get("_apid_scope", &scope)
+		ele.Get("_change_selector", &scope)
 		ele.Get("email", &Email)
 		ele.Get("id", &EntityIdentifier)
 		ele.Get("tenant_id", &tenantId)
@@ -238,7 +238,7 @@
 
 	var scope, apiProduct, res, env, tenantId string
 
-	prep, err := txn.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES($1,$2,$3,$4,$5)")
+	prep, err := txn.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_change_selector) VALUES($1,$2,$3,$4,$5)")
 	if err != nil {
 		log.Error("INSERT API_PRODUCT Failed: ", err)
 		return false
@@ -247,7 +247,7 @@
 	defer prep.Close()
 	for _, ele := range rows {
 
-		ele.Get("_apid_scope", &scope)
+		ele.Get("_change_selector", &scope)
 		ele.Get("id", &apiProduct)
 		ele.Get("api_resources", &res)
 		ele.Get("environments", &env)
@@ -277,7 +277,7 @@
 
 	var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
 
-	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES($1,$2,$3,$4,$5,$6);")
+	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _change_selector, status) VALUES($1,$2,$3,$4,$5,$6);")
 	if err != nil {
 		log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
 		return false
@@ -290,7 +290,7 @@
 		ele.Get("app_id", &AppId)
 		ele.Get("appcred_id", &EntityIdentifier)
 		ele.Get("tenant_id", &tenantId)
-		ele.Get("_apid_scope", &Scope)
+		ele.Get("_change_selector", &Scope)
 		ele.Get("status", &Status)
 
 		/*
@@ -438,14 +438,14 @@
 func deleteObject(object string, ele common.Row, txn *sql.Tx) bool {
 
 	var scope, apiProduct string
-	ssql := "DELETE FROM " + object + " WHERE id = $1 AND _apid_scope = $2"
+	ssql := "DELETE FROM " + object + " WHERE id = $1 AND _change_selector = $2"
 	prep, err := txn.Prepare(ssql)
 	if err != nil {
 		log.Error("DELETE ", object, " Failed: ", err)
 		return false
 	}
 	defer prep.Close()
-	ele.Get("_apid_scope", &scope)
+	ele.Get("_change_selector", &scope)
 	ele.Get("id", &apiProduct)
 
 	_, err = txn.Stmt(prep).Exec(apiProduct, scope)
@@ -465,7 +465,7 @@
 func deleteAPIproductMapper(ele common.Row, txn *sql.Tx) bool {
 	var ApiProduct, AppId, EntityIdentifier, apid_scope string
 
-	prep, err := txn.Prepare("DELETE FROM APP_CREDENTIAL_APIPRODUCT_MAPPER WHERE apiprdt_id=$1 AND app_id=$2 AND appcred_id=$3 AND _apid_scope=$4;")
+	prep, err := txn.Prepare("DELETE FROM APP_CREDENTIAL_APIPRODUCT_MAPPER WHERE apiprdt_id=$1 AND app_id=$2 AND appcred_id=$3 AND _change_selector=$4;")
 	if err != nil {
 		log.Error("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
 		return false
@@ -476,7 +476,7 @@
 	ele.Get("apiprdt_id", &ApiProduct)
 	ele.Get("app_id", &AppId)
 	ele.Get("appcred_id", &EntityIdentifier)
-	ele.Get("_apid_scope", &apid_scope)
+	ele.Get("_change_selector", &apid_scope)
 
 	_, err = txn.Stmt(prep).Exec(ApiProduct, AppId, EntityIdentifier, apid_scope)
 	if err != nil {
diff --git a/listener_test.go b/listener_test.go
index af8b78a..a8da554 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -34,7 +34,7 @@
 				Value: "tenant_id_0",
 				Type:  1,
 			},
-			"_apid_scope": {
+			"_change_selector": {
 				Value: "test_org0",
 				Type:  1,
 			},
@@ -54,7 +54,7 @@
 				Value: "tenant_id_0",
 				Type:  1,
 			},
-			"_apid_scope": {
+			"_change_selector": {
 				Value: "test_org0",
 				Type:  1,
 			},
@@ -78,7 +78,7 @@
 				Value: "tenant_id_0",
 				Type:  1,
 			},
-			"_apid_scope": {
+			"_change_selector": {
 				Value: "test_org0",
 				Type:  1,
 			},
@@ -102,7 +102,7 @@
 				Value: "Approved",
 				Type:  1,
 			},
-			"_apid_scope": {
+			"_change_selector": {
 				Value: "test_org0",
 				Type:  1,
 			},
@@ -126,7 +126,7 @@
 				Value: "Approved",
 				Type:  1,
 			},
-			"_apid_scope": {
+			"_change_selector": {
 				Value: "test_org0",
 				Type:  1,
 			},
@@ -200,8 +200,7 @@
 				v := url.Values{
 					"key": []string{"ch_app_credential_0"},
 					"uriPath": []string{"/test"},
-					"environment": []string{"Env_0"},
-					"organization": []string{"test_org0"},
+					"scopeuuid": []string{"XYZ"},
 					"action": []string{"verify"},
 				}
 				rsp, err := verifyAPIKey(v)
diff --git a/pluginData.go b/pluginData.go
index 8c3335d..b261d7c 100644
--- a/pluginData.go
+++ b/pluginData.go
@@ -4,8 +4,8 @@
 
 var pluginData = apid.PluginData{
 	Name: "apidVerifyAPIKey",
-	Version: "0.0.1",
+	Version: "0.0.2",
 	ExtraData: map[string]interface{}{
-		"schemaVersion": "0.0.1",
+		"schemaVersion": "0.0.2",
 	},
 }
diff --git a/validate_env.go b/validate_env.go
index d90e27c..9fede78 100644
--- a/validate_env.go
+++ b/validate_env.go
@@ -6,7 +6,9 @@
  * Ensure the ENV matches.
  */
 func validateEnv(envLocal string, envInPath string) bool {
-
+	if (envInPath == "") {
+		return false;
+	}
 	s := strings.TrimPrefix(envLocal, "{")
 	s = strings.TrimSuffix(s, "}")
 	fs := strings.Split(s, ",")
diff --git a/verifyAPIKey_suite_test.go b/verifyAPIKey_suite_test.go
index 610d941..870a376 100644
--- a/verifyAPIKey_suite_test.go
+++ b/verifyAPIKey_suite_test.go
@@ -37,6 +37,7 @@
 	Expect(err).NotTo(HaveOccurred())
 	setDB(db)
 	createTables(db)
+	createApidClusterTables(db)
 	insertTestData(db)
 	testServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 		if req.URL.Path == apiPath {
@@ -90,7 +91,7 @@
 			Value: "Org_0",
 			Type:  1,
 		}
-		srvItems["_apid_scope"] = scv
+		srvItems["_change_selector"] = scv
 
 		scv = &common.ColumnVal{
 			Value: "tenant_id_xxxx",
@@ -141,7 +142,7 @@
 			Value: "Org_0",
 			Type:  1,
 		}
-		srvItems["_apid_scope"] = scv
+		srvItems["_change_selector"] = scv
 
 		scv = &common.ColumnVal{
 			Value: "tenant_id_xxxx",
@@ -157,7 +158,7 @@
 	var j, k int
 	for i := 0; i < 10; i++ {
 		resulti := strconv.FormatInt(int64(i), 10)
-		for j = k; j < 10+k; j++ {
+		for j = k; j < 10 + k; j++ {
 			var rows []common.Row
 
 			srvItems := common.Row{}
@@ -191,7 +192,7 @@
 				Value: "Org_0",
 				Type:  1,
 			}
-			srvItems["_apid_scope"] = scv
+			srvItems["_change_selector"] = scv
 
 			scv = &common.ColumnVal{
 				Value: "tenant_id_xxxx",
@@ -232,7 +233,7 @@
 			Value: "Org_0",
 			Type:  1,
 		}
-		srvItems["_apid_scope"] = scv
+		srvItems["_change_selector"] = scv
 
 		scv = &common.ColumnVal{
 			Value: "tenant_id_xxxx",
@@ -275,7 +276,7 @@
 			Value: "Org_0",
 			Type:  1,
 		}
-		srvItems["_apid_scope"] = scv
+		srvItems["_change_selector"] = scv
 
 		scv = &common.ColumnVal{
 			Value: "tenant_id_xxxx",
@@ -286,6 +287,30 @@
 		res := insertAPIProductMappers(rows, txn)
 		Expect(res).Should(BeTrue())
 	}
-
+	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) " +
+		"VALUES" +
+		"($1,$2,$3,$4,$5,$6)",
+		"ABCDE",
+		"some_cluster_id",
+		"some_cluster_id",
+		"tenant_id_xxxx",
+		"test_org0",
+		"Env_0",
+	);
+	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) " +
+		"VALUES" +
+		"($1,$2,$3,$4,$5,$6)",
+		"XYZ",
+		"test_org0",
+		"somecluster_id",
+		"tenant_id_0",
+		"test_org0",
+		"Env_0",
+	);
+	log.Info("Inserted DATA_SCOPE for test")
 	txn.Commit()
+	var count int64
+	db.QueryRow("select count(*) from data_scope").Scan(&count);
+	log.Info("Found ", count)
+
 }
