diff --git a/accessEntity/accessEntity_suite_test.go b/accessEntity/accessEntity_suite_test.go
index 6b56049..7ffc503 100644
--- a/accessEntity/accessEntity_suite_test.go
+++ b/accessEntity/accessEntity_suite_test.go
@@ -20,16 +20,13 @@
 	"github.com/apid/apid-core"
 	"github.com/apid/apid-core/factory"
 	"github.com/apid/apidVerifyApiKey/common"
+	"io/ioutil"
 	"os"
 	"testing"
 	"time"
 )
 
-const testTempDirBase = "./tmp/"
-
-var (
-	testTempDir string
-)
+var testTempDirBase string
 
 func initSetup(s apid.Services) (apid.PluginData, error) {
 	SetApidServices(s, apid.Log())
@@ -39,7 +36,9 @@
 
 var _ = BeforeSuite(func() {
 	apid.RegisterPlugin(initSetup, common.PluginData)
-	_ = os.MkdirAll(testTempDirBase, os.ModePerm)
+	var err error
+	testTempDirBase, err = ioutil.TempDir("", "verify_apikey_")
+	Expect(err).Should(Succeed())
 	apid.Initialize(factory.DefaultServicesFactory())
 	apid.InitializePlugins("0.0.0")
 	go services.API().Listen()
@@ -48,7 +47,7 @@
 
 var _ = AfterSuite(func() {
 	apid.Events().Close()
-	os.RemoveAll(testTempDirBase)
+	Expect(os.RemoveAll(testTempDirBase)).Should(Succeed())
 })
 
 func TestVerifyAPIKey(t *testing.T) {
diff --git a/accessEntity/api.go b/accessEntity/api.go
index 520224c..008f00d 100644
--- a/accessEntity/api.go
+++ b/accessEntity/api.go
@@ -77,7 +77,7 @@
 
 	ErrInvalidPar = &common.ErrorResponse{
 		ResponseCode:    strconv.Itoa(INVALID_PARAMETERS),
-		ResponseMessage: "invalid identifiers",
+		ResponseMessage: "Invalid Identifiers",
 		StatusCode:      http.StatusBadRequest,
 	}
 
@@ -121,8 +121,11 @@
 
 const (
 	INVALID_PARAMETERS = iota
+	// Server DB Error
 	DB_ERROR
+	// Invalid/Wrong Data in DB data. This probably means something wrong happened in upstream PG/Transicator.
 	DATA_ERROR
+	// 404
 	NOT_FOUND
 )
 
@@ -146,12 +149,28 @@
 	log.Debug("API endpoints initialized")
 }
 
-func (a *ApiManager) HandleApps(w http.ResponseWriter, r *http.Request) {
+func (a *ApiManager) handelEndpoint(endpoint string, w http.ResponseWriter, r *http.Request) {
 	ids, org, err := extractIdentifiers(r.URL.Query())
 	if err != nil {
 		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
 	}
-	res, errRes := a.getApp(org, ids)
+	var res interface{}
+	var errRes *common.ErrorResponse
+	switch endpoint {
+	case EndpointApp:
+		res, errRes = a.getApp(org, ids)
+	case EndpointApiProduct:
+		res, errRes = a.getApiProduct(org, ids)
+	case EndpointCompany:
+		res, errRes = a.getCompany(org, ids)
+	case EndpointCompanyDeveloper:
+		res, errRes = a.getCompanyDeveloper(org, ids)
+	case EndpointDeveloper:
+		res, errRes = a.getDeveloper(org, ids)
+	case EndpointAppCredentials:
+		res, errRes = a.getAppCredential(org, ids)
+	}
+
 	if errRes != nil {
 		w.WriteHeader(errRes.StatusCode)
 		writeJson(errRes, w, r)
@@ -160,73 +179,27 @@
 	writeJson(res, w, r)
 }
 
+func (a *ApiManager) HandleApps(w http.ResponseWriter, r *http.Request) {
+	a.handelEndpoint(EndpointApp, w, r)
+}
+
 func (a *ApiManager) HandleApiProducts(w http.ResponseWriter, r *http.Request) {
-	ids, org, err := extractIdentifiers(r.URL.Query())
-	if err != nil {
-		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
-	}
-	details, errRes := a.getApiProduct(org, ids)
-	if errRes != nil {
-		w.WriteHeader(errRes.StatusCode)
-		writeJson(errRes, w, r)
-		return
-	}
-	writeJson(details, w, r)
+	a.handelEndpoint(EndpointApiProduct, w, r)
 }
 
 func (a *ApiManager) HandleCompanies(w http.ResponseWriter, r *http.Request) {
-	ids, org, err := extractIdentifiers(r.URL.Query())
-	if err != nil {
-		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
-	}
-	details, errRes := a.getCompany(org, ids)
-	if errRes != nil {
-		w.WriteHeader(errRes.StatusCode)
-		writeJson(errRes, w, r)
-		return
-	}
-	writeJson(details, w, r)
+	a.handelEndpoint(EndpointCompany, w, r)
 }
 
 func (a *ApiManager) HandleCompanyDevelopers(w http.ResponseWriter, r *http.Request) {
-	ids, org, err := extractIdentifiers(r.URL.Query())
-	if err != nil {
-		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
-	}
-	details, errRes := a.getCompanyDeveloper(org, ids)
-	if errRes != nil {
-		w.WriteHeader(errRes.StatusCode)
-		writeJson(errRes, w, r)
-		return
-	}
-	writeJson(details, w, r)
+	a.handelEndpoint(EndpointCompanyDeveloper, w, r)
 }
 func (a *ApiManager) HandleDevelopers(w http.ResponseWriter, r *http.Request) {
-	ids, org, err := extractIdentifiers(r.URL.Query())
-	if err != nil {
-		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
-	}
-	details, errRes := a.getDeveloper(org, ids)
-	if errRes != nil {
-		w.WriteHeader(errRes.StatusCode)
-		writeJson(errRes, w, r)
-		return
-	}
-	writeJson(details, w, r)
+	a.handelEndpoint(EndpointDeveloper, w, r)
 }
 
 func (a *ApiManager) HandleAppCredentials(w http.ResponseWriter, r *http.Request) {
-	ids, org, err := extractIdentifiers(r.URL.Query())
-	if err != nil {
-		common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest)
-	}
-	details, errRes := a.getAppCredential(org, ids)
-	if errRes != nil {
-		w.WriteHeader(errRes.StatusCode)
-		writeJson(errRes, w, r)
-		return
-	}
-	writeJson(details, w, r)
+	a.handelEndpoint(EndpointAppCredentials, w, r)
 }
 
 func extractIdentifiers(pars map[string][]string) (map[string]string, string, error) {
@@ -254,9 +227,9 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
+	priKey, priVal := keyVals[0], keyVals[1]
 
-	devs, err := a.DbMan.GetCompanyDevelopers(org, priKey, priVal, secKey, secVal)
+	devs, err := a.DbMan.GetCompanyDevelopers(org, priKey, priVal, "", "")
 	if err != nil {
 		log.Errorf("getCompanyDeveloper: %v", err)
 		return nil, newDbError(err)
@@ -294,9 +267,9 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
+	priKey, priVal := keyVals[0], keyVals[1]
 
-	devs, err := a.DbMan.GetDevelopers(org, priKey, priVal, secKey, secVal)
+	devs, err := a.DbMan.GetDevelopers(org, priKey, priVal, "", "")
 	if err != nil {
 		log.Errorf("getDeveloper: %v", err)
 		return nil, newDbError(err)
@@ -332,9 +305,9 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
+	priKey, priVal := keyVals[0], keyVals[1]
 
-	coms, err := a.DbMan.GetCompanies(org, priKey, priVal, secKey, secVal)
+	coms, err := a.DbMan.GetCompanies(org, priKey, priVal, "", "")
 	if err != nil {
 		log.Errorf("getCompany: %v", err)
 		return nil, newDbError(err)
@@ -365,8 +338,10 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
-
+	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], "", ""
+	if len(keyVals) > 2 {
+		secKey, secVal = keyVals[2], keyVals[3]
+	}
 	prods, err := a.DbMan.GetApiProducts(org, priKey, priVal, secKey, secVal)
 	if err != nil {
 		log.Errorf("getApiProduct: %v", err)
@@ -399,9 +374,9 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
+	priKey, priVal := keyVals[0], keyVals[1]
 
-	appCreds, err := a.DbMan.GetAppCredentials(org, priKey, priVal, secKey, secVal)
+	appCreds, err := a.DbMan.GetAppCredentials(org, priKey, priVal, "", "")
 	if err != nil {
 		log.Errorf("getAppCredential: %v", err)
 		return nil, newDbError(err)
@@ -453,7 +428,10 @@
 	if !valid {
 		return nil, ErrInvalidPar
 	}
-	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3]
+	priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], "", ""
+	if len(keyVals) > 2 {
+		secKey, secVal = keyVals[2], keyVals[3]
+	}
 
 	apps, err := a.DbMan.GetApps(org, priKey, priVal, secKey, secVal)
 	if err != nil {
@@ -708,7 +686,6 @@
 				if len(ids) == 2 {
 					return false, nil
 				}
-				keyVals = append(keyVals, "", "")
 				return true, keyVals
 			}
 		}
diff --git a/accessEntity/data.go b/accessEntity/data.go
index 0039c1f..233e7c5 100644
--- a/accessEntity/data.go
+++ b/accessEntity/data.go
@@ -733,7 +733,7 @@
 	var prods []common.ApiProduct
 	for _, prod := range apiProducts {
 		resources := common.JsonToStringArray(prod.ApiResources)
-		if InSlice(resources, resource) {
+		if Contains(resources, resource) {
 			prods = append(prods, prod)
 		}
 	}
@@ -741,7 +741,7 @@
 	return prods
 }
 
-func InSlice(sl []string, str string) bool {
+func Contains(sl []string, str string) bool {
 	for _, s := range sl {
 		if s == str {
 			return true
diff --git a/common/pluginData.go b/common/pluginData.go
index 8b68f3c..89a7c11 100644
--- a/common/pluginData.go
+++ b/common/pluginData.go
@@ -18,8 +18,8 @@
 
 var PluginData = apid.PluginData{
 	Name:    "apidVerifyAPIKey",
-	Version: "0.0.4",
+	Version: "0.1.0",
 	ExtraData: map[string]interface{}{
-		"schemaVersion": "0.0.3",
+		"schemaVersion": "0.1.0",
 	},
 }
diff --git a/verifyApiKey/api_test.go b/verifyApiKey/api_test.go
index 86760e7..97e226f 100644
--- a/verifyApiKey/api_test.go
+++ b/verifyApiKey/api_test.go
@@ -291,6 +291,9 @@
 	httpReq, err := http.NewRequest("POST", uri.String(), strings.NewReader(string(jsonBody)))
 	httpReq.Header.Set("Content-Type", "application/json")
 	res, err := client.Do(httpReq)
+	if err != nil {
+		return nil, err
+	}
 	defer res.Body.Close()
 	responseBody, err := ioutil.ReadAll(res.Body)
 
diff --git a/verifyApiKey/verifyAPIKey_suite_test.go b/verifyApiKey/verifyAPIKey_suite_test.go
index 15f739d..67873e7 100644
--- a/verifyApiKey/verifyAPIKey_suite_test.go
+++ b/verifyApiKey/verifyAPIKey_suite_test.go
@@ -19,18 +19,21 @@
 	. "github.com/onsi/gomega"
 
 	"github.com/apid/apid-core"
+	"io/ioutil"
 	"os"
 	"testing"
 )
 
-const testTempDirBase = "./tmp/"
+var testTempDirBase string
 
 var (
 	testTempDir string
 )
 
 var _ = BeforeSuite(func() {
-	_ = os.MkdirAll(testTempDirBase, os.ModePerm)
+	var err error
+	testTempDirBase, err = ioutil.TempDir("", "verify_apikey_")
+	Expect(err).Should(Succeed())
 })
 
 var _ = AfterSuite(func() {
@@ -38,8 +41,7 @@
 	if testServer != nil {
 		testServer.Close()
 	}
-	os.RemoveAll(testTempDirBase)
-
+	Expect(os.RemoveAll(testTempDirBase)).Should(Succeed())
 })
 
 func TestVerifyAPIKey(t *testing.T) {
