diff --git a/api.go b/api.go
index eb5b6b2..66da238 100644
--- a/api.go
+++ b/api.go
@@ -124,7 +124,8 @@
 			a.callback_url,
 			ad.name,
 			ad.id
-		FROM APP_CREDENTIAL AS c 
+		FROM
+			APP_CREDENTIAL AS c 
 			INNER JOIN APP AS a ON c.app_id = a.id
 			INNER JOIN ALL_DEVELOPERS AS ad 
 				ON (ad.id = a.company_id OR ad.id = a.developer_id)
diff --git a/api_test.go b/api_test.go
index bc545e2..2e4e76f 100644
--- a/api_test.go
+++ b/api_test.go
@@ -33,20 +33,6 @@
 				Expect(res).Should(BeTrue())
 			}
 
-			// companies
-			for i := 0; i < 10; i++ {
-				row := generateTestCompany(i)
-				res := insertCompanies([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// company developers
-			for i := 0; i < 10; i++ {
-				row := generateTestCompanyDeveloper(i)
-				res := insertCompanyDevelopers([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
 			// application
 			var j, k int
 			for i := 0; i < 10; i++ {
@@ -70,6 +56,51 @@
 				Expect(res).Should(BeTrue())
 			}
 
+			// Following are data for company
+			// api products
+			for i := 100; i < 110; i++ {
+				row := generateTestApiProduct(i)
+				res := insertAPIproducts([]common.Row{row}, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			// companies
+			for i := 100; i < 110; i++ {
+				row := generateTestCompany(i)
+				res := insertCompanies([]common.Row{row}, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			// company developers
+			for i := 100; i < 110; i++ {
+				row := generateTestCompanyDeveloper(i)
+				res := insertCompanyDevelopers([]common.Row{row}, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			// application
+			k = 100
+			for i := 100; i < 110; i++ {
+				for j = k; j < 100+k; j++ {
+					row := generateTestAppCompany(j, i)
+					res := insertApplications([]common.Row{row}, txn)
+					Expect(res).Should(BeTrue())
+				}
+				k = j
+			}
+			// app credentials
+			for i := 100; i < 110; i++ {
+				row := generateTestAppCreds(i)
+				res := insertCredentials([]common.Row{row}, txn)
+				Expect(res).Should(BeTrue())
+			}
+			// api product mapper
+			for i := 100; i < 110; i++ {
+				row := generateTestApiProductMapper(i)
+				res := insertAPIProductMappers([]common.Row{row}, txn)
+				Expect(res).Should(BeTrue())
+			}
+
 			txn.Commit()
 			var count int64
 			db.QueryRow("select count(*) from data_scope").Scan(&count)
@@ -94,7 +125,7 @@
 
 		})
 
-		It("should successfully verify good keys", func() {
+		It("should successfully verify good Developer keys", func() {
 			for i := 1; i < 10; i++ {
 				resulti := strconv.FormatInt(int64(i), 10)
 				v := url.Values{
@@ -113,6 +144,25 @@
 			}
 		})
 
+		It("should successfully verify good Company keys", func() {
+			for i := 100; i < 110; i++ {
+				resulti := strconv.FormatInt(int64(i), 10)
+				v := url.Values{
+					"key":       []string{"app_credential_" + resulti},
+					"uriPath":   []string{"/test"},
+					"scopeuuid": []string{"ABCDE"},
+					"action":    []string{"verify"},
+				}
+				rsp, err := verifyAPIKey(v)
+				Expect(err).ShouldNot(HaveOccurred())
+
+				var respj kmsResponseSuccess
+				json.Unmarshal(rsp, &respj)
+				Expect(respj.Type).Should(Equal("APIKeyContext"))
+				Expect(respj.RspInfo.Key).Should(Equal("app_credential_" + resulti))
+			}
+		})
+
 		It("Positive DB test for Delete operations", func() {
 			db := getDB()
 			txn, err := db.Begin()
@@ -147,7 +197,7 @@
 				Expect(res).Should(BeTrue())
 			}
 
-			for i := 0; i < 10; i++ {
+			for i := 100; i < 110; i++ {
 				row := generateTestCompanyDeveloper(i)
 				res := deleteCompanyDeveloper(row, txn)
 				Expect(res).Should(BeTrue())
diff --git a/listener_test.go b/listener_test.go
index 03641b2..d285f7b 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -106,6 +106,9 @@
 				"_change_selector": {
 					Value: "test_org0",
 				},
+				"parent_id": {
+					Value: "ch_developer_id_2",
+				},
 			}
 
 			/* CRED */
@@ -452,6 +455,9 @@
 			"_change_selector": {
 				Value: "test_org0",
 			},
+			"parent_id": {
+				Value: "ch_developer_id_1",
+			},
 		}
 
 		/* CRED */
diff --git a/test_helper.go b/test_helper.go
index 61f8f00..44a341b 100644
--- a/test_helper.go
+++ b/test_helper.go
@@ -5,11 +5,11 @@
 	"strconv"
 )
 
-func convertSuffix(i int) string{
+func convertSuffix(i int) string {
 	return strconv.FormatInt(int64(i), 10)
 }
 
-func generateTestApiProduct(suffix int) common.Row{
+func generateTestApiProduct(suffix int) common.Row {
 	return common.Row{
 		"id": {
 			Value: "api_product_" + convertSuffix(suffix),
@@ -30,7 +30,7 @@
 }
 
 func generateTestDeveloper(suffix int) common.Row {
-	 return common.Row{
+	return common.Row{
 		"id": {
 			Value: "developer_id_" + convertSuffix(suffix),
 		},
@@ -115,6 +115,35 @@
 		"_change_selector": {
 			Value: "Org_0",
 		},
+		"parent_id": {
+			Value: "developer_id_" + convertSuffix(suffix2),
+		},
+	}
+}
+
+func generateTestAppCompany(suffix1, suffix2 int) common.Row {
+	return common.Row{
+		"id": {
+			Value: "application_id_" + convertSuffix(suffix1),
+		},
+		"company_id": {
+			Value: "company_id_" + convertSuffix(suffix2),
+		},
+		"status": {
+			Value: "Approved",
+		},
+		"tenant_id": {
+			Value: "tenant_id_xxxx",
+		},
+		"callback_url": {
+			Value: "http://apigee.com",
+		},
+		"_change_selector": {
+			Value: "Org_0",
+		},
+		"parent_id": {
+			Value: "company_id_" + convertSuffix(suffix2),
+		},
 	}
 }
 
@@ -163,5 +192,3 @@
 		},
 	}
 }
-
-
