diff --git a/accessEntity/data.go b/accessEntity/data.go
index bb53fea..4634f61 100644
--- a/accessEntity/data.go
+++ b/accessEntity/data.go
@@ -16,7 +16,6 @@
 import (
 	"database/sql"
 	"fmt"
-	"github.com/apid/apid-core/cipher"
 	"github.com/apid/apid-core/util"
 	"github.com/apid/apidApiMetadata/common"
 	"strings"
@@ -96,9 +95,7 @@
 	if err != nil || !email.Valid {
 		return "", err
 	}
-	// decryption
-	ret, err := d.CipherManager.TryDecryptBase64(email.String, org)
-	return ret, err
+	return email.String, err
 }
 
 func (d *DbManager) GetComNames(id string, idType string) ([]string, error) {
@@ -287,6 +284,10 @@
 		appCredentials, err = d.getAppCredentialByAppId(priVal, org)
 	}
 
+	if err != nil {
+		return
+	}
+
 	var plaintext string
 	for i := range appCredentials {
 		if plaintext, err = d.CipherManager.TryDecryptBase64(appCredentials[i].ConsumerSecret, org); err != nil {
@@ -309,15 +310,6 @@
 	case IdentifierDeveloperId:
 		developers, err = d.getDeveloperById(priVal, org)
 	}
-
-	var plaintext string
-	for i := range developers {
-		if plaintext, err = d.CipherManager.TryDecryptBase64(developers[i].Email, org); err != nil {
-			return
-		}
-		developers[i].Email = plaintext
-	}
-
 	return
 }
 
@@ -369,17 +361,12 @@
 		appQuery = selectAppByNameAndDeveloperId(
 			"?",
 			selectDeveloperByEmail(
-				"?, ?",
+				"?",
 				"id",
 			),
 			"id",
 		)
-		var encrypted string
-		encrypted, err = d.CipherManager.EncryptBase64(devEmail, org, cipher.ModeEcb, cipher.PaddingPKCS5)
-		if err != nil {
-			return
-		}
-		args = append(args, devEmail, encrypted)
+		args = append(args, devEmail)
 	case devId != "":
 		appQuery = selectAppByNameAndDeveloperId(
 			"?",
@@ -438,17 +425,12 @@
 		query = selectAppByNameAndDeveloperId(
 			"?",
 			selectDeveloperByEmail(
-				"?, ?",
+				"?",
 				"id",
 			),
 			cols...,
 		)
-		var encrypted string
-		encrypted, err = d.CipherManager.EncryptBase64(devEmail, org, cipher.ModeEcb, cipher.PaddingPKCS5)
-		if err != nil {
-			return
-		}
-		args = append(args, devEmail, encrypted)
+		args = append(args, devEmail)
 	case devId != "":
 		query = selectAppByNameAndDeveloperId(
 			"?",
@@ -610,16 +592,11 @@
 func (d *DbManager) getDeveloperByEmail(email, org string) (developers []common.Developer, err error) {
 	cols := []string{"*"}
 	query := selectDeveloperByEmail(
-		"?, ?",
+		"?",
 		cols...,
 	) + " AND dev.tenant_id IN " + sql_select_tenant_org
 	//log.Debugf("getDeveloperByEmail: %v", query)
-	var encrypted string
-	encrypted, err = d.CipherManager.EncryptBase64(email, org, cipher.ModeEcb, cipher.PaddingPKCS5)
-	if err != nil {
-		return
-	}
-	err = d.GetDb().QueryStructs(&developers, query, email, encrypted, org)
+	err = d.GetDb().QueryStructs(&developers, query, email, org)
 	return
 }
 
diff --git a/accessEntity/data_test.sql b/accessEntity/data_test.sql
index 16aa13f..7f01503 100644
--- a/accessEntity/data_test.sql
+++ b/accessEntity/data_test.sql
@@ -36,9 +36,9 @@
 CREATE TABLE kms_company_developer (tenant_id text,company_id text,developer_id text,roles text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (tenant_id,company_id,developer_id));
 INSERT INTO "kms_company_developer" VALUES('515211e9','a94f75e2-69b0-44af-8776-155df7c7d22e','590f33bf-f05c-48c1-bb93-183759bd9ee1','admin','2017-11-02 16:00:16.287+00:00','haoming@apid.git','2017-11-02 16:00:16.287+00:00','haoming@apid.git','515211e9');
 CREATE TABLE kms_developer (id text,tenant_id text,username text,first_name text,last_name text,password text,email text,status text,encrypted_password text,salt text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id));
-INSERT INTO "kms_developer" VALUES('e41f04e8-9d3f-470a-8bfd-c7939945896c','515211e9','haoming','haoming','zhang','','encrypted:bar@google.com','ACTIVE','','','2017-08-16 22:39:46.669+00:00','foo@google.com','2017-08-16 22:39:46.669+00:00','foo@google.com','515211e9');
-INSERT INTO "kms_developer" VALUES('47d862db-884f-4b8e-9649-fe6d0be1a739','515211e9','qwe','qwe','qwe','','encrypted:barfoo@google.com','ACTIVE','','','2017-10-12 19:12:48.306+00:00','haoming@apid.git','2017-10-12 19:12:48.306+00:00','haoming@apid.git','515211e9');
-INSERT INTO "kms_developer" VALUES('590f33bf-f05c-48c1-bb93-183759bd9ee1','515211e9','remoteproxy','remote','proxy','','encrypted:fooo@google.com','ACTIVE','','','2017-09-20 23:03:52.327+00:00','haoming@apid.git','2017-09-20 23:03:52.327+00:00','haoming@apid.git','515211e9');
+INSERT INTO "kms_developer" VALUES('e41f04e8-9d3f-470a-8bfd-c7939945896c','515211e9','haoming','haoming','zhang','','bar@google.com','ACTIVE','','','2017-08-16 22:39:46.669+00:00','foo@google.com','2017-08-16 22:39:46.669+00:00','foo@google.com','515211e9');
+INSERT INTO "kms_developer" VALUES('47d862db-884f-4b8e-9649-fe6d0be1a739','515211e9','qwe','qwe','qwe','','barfoo@google.com','ACTIVE','','','2017-10-12 19:12:48.306+00:00','haoming@apid.git','2017-10-12 19:12:48.306+00:00','haoming@apid.git','515211e9');
+INSERT INTO "kms_developer" VALUES('590f33bf-f05c-48c1-bb93-183759bd9ee1','515211e9','remoteproxy','remote','proxy','','fooo@google.com','ACTIVE','','','2017-09-20 23:03:52.327+00:00','haoming@apid.git','2017-09-20 23:03:52.327+00:00','haoming@apid.git','515211e9');
 CREATE TABLE edgex_apid_cluster (id text,name text,description text,umbrella_org_app_name text,created blob,created_by text,updated blob,updated_by text,_change_selector text, last_sequence text DEFAULT '', primary key (id));
 INSERT INTO "edgex_apid_cluster" VALUES('950b30f1-8c41-4bf5-94a3-f10c104ff5d4','apid-haomingOrgCluster','','X-sZXhaOymL6VtWnNQqK7uPsFyPvZYq6FFnrc8','2017-08-23 23:31:49.134+00:00','temp@google.com','2017-08-23 23:31:49.134+00:00','temp@google.com','950b30f1-8c41-4bf5-94a3-f10c104ff5d4','');
 CREATE TABLE kms_api_product (id text,tenant_id text,name text,display_name text,description text,api_resources text,approval_type text,scopes text,proxies text,environments text,quota text,quota_time_unit text,quota_interval integer,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id));
@@ -49,9 +49,9 @@
 INSERT INTO "kms_api_product" VALUES('db90a25a-15c8-42ad-96c1-63ed9682b5a9','515211e9','apigee-remote-proxy','apigee-remote-proxy','','{/**,/}','AUTO','{""}','{apigee-remote-proxy}','{prod,test}','','',NULL,'2017-09-20 23:05:09.234+00:00','haoming@apid.git','2017-09-20 23:05:09.234+00:00','haoming@apid.git','515211e9');
 INSERT INTO "kms_api_product" VALUES('fea8a6d5-8d34-477f-ac82-c397eaec06af','515211e9','testproductsdljnkpt','testproductsdljnkpt','','{/res1}','AUTO','{}','{}','{test}','','',NULL,'2017-11-02 16:00:15.608+00:00','haoming@apid.git','2017-11-02 16:00:18.125+00:00','haoming@apid.git','515211e9');
 CREATE TABLE kms_app_credential (id text,tenant_id text,consumer_secret text,app_id text,method_type text,status text,issued_at blob,expires_at blob,app_status text,scopes text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id));
-INSERT INTO "kms_app_credential" VALUES('abcd','515211e9','secret1','408ad853-3fa0-402f-90ee-103de98d71a5','','APPROVED','2017-08-18 22:13:18.35+00:00','','','{}','2017-08-18 22:13:18.35+00:00','-NA-','2017-08-18 22:13:18.352+00:00','-NA-','515211e9');
-INSERT INTO "kms_app_credential" VALUES('dcba','515211e9','secret2','ae053aee-f12d-4591-84ef-2e6ae0d4205d','','APPROVED','2017-09-20 23:05:59.148+00:00','','','{}','2017-09-20 23:05:59.148+00:00','-NA-','2017-09-20 23:05:59.151+00:00','-NA-','515211e9');
-INSERT INTO "kms_app_credential" VALUES('wxyz','515211e9','secret3','35608afe-2715-4064-bb4d-3cbb4e82c474','','APPROVED','2017-11-02 16:00:16.512+00:00','','','{}','2017-11-02 16:00:16.512+00:00','-NA-','2017-11-02 16:00:16.514+00:00','-NA-','515211e9');
+INSERT INTO "kms_app_credential" VALUES('abcd','515211e9','encrypted:secret1','408ad853-3fa0-402f-90ee-103de98d71a5','','APPROVED','2017-08-18 22:13:18.35+00:00','','','{}','2017-08-18 22:13:18.35+00:00','-NA-','2017-08-18 22:13:18.352+00:00','-NA-','515211e9');
+INSERT INTO "kms_app_credential" VALUES('dcba','515211e9','encrypted:secret2','ae053aee-f12d-4591-84ef-2e6ae0d4205d','','APPROVED','2017-09-20 23:05:59.148+00:00','','','{}','2017-09-20 23:05:59.148+00:00','-NA-','2017-09-20 23:05:59.151+00:00','-NA-','515211e9');
+INSERT INTO "kms_app_credential" VALUES('wxyz','515211e9','encrypted:secret3','35608afe-2715-4064-bb4d-3cbb4e82c474','','APPROVED','2017-11-02 16:00:16.512+00:00','','','{}','2017-11-02 16:00:16.512+00:00','-NA-','2017-11-02 16:00:16.514+00:00','-NA-','515211e9');
 CREATE TABLE kms_app_credential_apiproduct_mapper (tenant_id text,appcred_id text,app_id text,apiprdt_id text,status text,_change_selector text, primary key (tenant_id,appcred_id,app_id,apiprdt_id));
 INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','abcd','408ad853-3fa0-402f-90ee-103de98d71a5','b7e0970c-4677-4b05-8105-5ea59fdcf4e7','APPROVED','515211e9');
 INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','dcba','ae053aee-f12d-4591-84ef-2e6ae0d4205d','db90a25a-15c8-42ad-96c1-63ed9682b5a9','APPROVED','515211e9');
diff --git a/common/cipher.go b/common/cipher.go
index 6e88d33..5e727a2 100644
--- a/common/cipher.go
+++ b/common/cipher.go
@@ -27,7 +27,7 @@
 	"time"
 )
 
-const RegEncrypted = `^\{[0-9A-Za-z]+/[0-9A-Za-z]+/[0-9A-Za-z]+\}.`
+const regEncrypted = `^\{[0-9A-Za-z]+/[0-9A-Za-z]+/[0-9A-Za-z]+\}.`
 const retrieveEncryptKeyPath = "/encryptionkey"
 const EncryptAes = "AES"
 
@@ -44,12 +44,11 @@
 )
 const errorCodeNoKey = "organizations.EncryptionKeyDoesNotExist"
 
-var RegexpEncrypted = regexp.MustCompile(RegEncrypted)
+var RegexpEncrypted = regexp.MustCompile(regEncrypted)
 
 func CreateCipherManager(client *http.Client, serverUrlBase string) *KmsCipherManager {
 	return &KmsCipherManager{
 		serverUrlBase: serverUrlBase,
-		key:           make(map[string][]byte),
 		aes:           make(map[string]*cipher.AesCipher),
 		mutex:         &sync.RWMutex{},
 		client:        client,
@@ -60,8 +59,6 @@
 
 type KmsCipherManager struct {
 	serverUrlBase string
-	// org-level key map {organization: key}
-	key map[string][]byte
 	// org-level AesCipher map {organization: AesCipher}
 	aes      map[string]*cipher.AesCipher
 	mutex    *sync.RWMutex
@@ -91,7 +88,6 @@
 			return
 		case <-ticker.C:
 			if err := c.retrieveKey(org); err != nil {
-
 				log.Error(err)
 			} else {
 				return
@@ -103,14 +99,14 @@
 func (c *KmsCipherManager) retrieveKey(org string) error {
 	var key []byte
 	req, err := http.NewRequest(http.MethodGet, c.serverUrlBase+retrieveEncryptKeyPath, nil)
+	if err != nil {
+		return fmt.Errorf("failed to create retrieving key request for org=%s : %v", org, err)
+	}
 	pars := req.URL.Query()
 	pars[parameterOrganization] = []string{org}
 	req.URL.RawQuery = pars.Encode()
 	req.Header.Set("Authorization", "Bearer "+services.Config().GetString(configBearerToken))
 	log.Debugf("Retrieving key: %s", req.URL.String())
-	if err != nil {
-		return fmt.Errorf("failed to create retrieving key request for org=%s : %v", org, err)
-	}
 	res, err := c.client.Do(req)
 	if err != nil {
 		return fmt.Errorf("failed to retrieve key for org=%s : %v", org, err)
@@ -131,7 +127,6 @@
 	}
 
 	if res.StatusCode != http.StatusOK {
-		err = fmt.Errorf("failed to retrieve key for org [%v] with status: %v", org, res.Status)
 		return fmt.Errorf("failed to retrieve key for org [%v] with status: %v", org, res.Status)
 	}
 
@@ -151,7 +146,6 @@
 		return fmt.Errorf("CreateAesCipher error for org [%v] when CreateAesCipher: %v", org, err)
 	}
 	c.mutex.Lock()
-	c.key[org] = key
 	c.aes[org] = a
 	c.mutex.Unlock()
 	return nil
@@ -228,48 +222,47 @@
 	return
 }
 
-// TODO: make sure this regex has no false positive for all possible inputs
 func IsEncrypted(input string) (encrypted bool) {
 	return RegexpEncrypted.Match([]byte(input))
 }
 
 func GetCiphertext(input string) (ciphertext string, mode cipher.Mode, padding cipher.Padding, err error) {
-	l := strings.SplitN(input, "}", 2)
-	if len(l) != 2 {
+	list := strings.SplitN(input, "}", 2)
+	if len(list) != 2 {
 		err = fmt.Errorf("invalid input for GetCiphertext: %v", input)
 		return
 	}
-	ciphertext = l[1]
-	l = strings.Split(strings.TrimLeft(l[0], "{"), "/")
-	if len(l) != 3 {
+	ciphertext = list[1]
+	list = strings.Split(strings.TrimLeft(list[0], "{"), "/")
+	if len(list) != 3 {
 		err = fmt.Errorf("invalid input for GetCiphertext: %v", input)
 		return
 	}
 	// encryption algorithm
-	if l[0] != EncryptAes {
-		err = fmt.Errorf("unsupported algorithm for GetCiphertext: %v", l[0])
+	if list[0] != EncryptAes {
+		err = fmt.Errorf("unsupported algorithm for GetCiphertext: %v", list[0])
 		return
 	}
 	// mode
-	mode = cipher.Mode(l[1])
+	mode = cipher.Mode(list[1])
 	// padding
-	padding = cipher.Padding(l[2])
+	padding = cipher.Padding(list[2])
 	return
 }
 
-type ErrorRes struct {
+type KeyErrorResponse struct {
 	Code    string
 	Message string
 }
 
-func parseErrorResponse(res *http.Response) (*ErrorRes, error) {
-	contentType := res.Header.Get("Content-Type")
+func parseErrorResponse(res *http.Response) (*KeyErrorResponse, error) {
+	contentType := res.Header.Get(headerContentType)
 	defer res.Body.Close()
 	body, err := ioutil.ReadAll(res.Body)
 	if err != nil {
 		return nil, err
 	}
-	ret := &ErrorRes{}
+	ret := &KeyErrorResponse{}
 	if contentType == typeJson {
 		return ret, json.Unmarshal(body, ret)
 	} else if contentType == typeXml {
diff --git a/common/cipher_test.go b/common/cipher_test.go
index 4ff12b9..62162ad 100644
--- a/common/cipher_test.go
+++ b/common/cipher_test.go
@@ -40,7 +40,6 @@
 		BeforeEach(func() {
 			testCipherMan = CreateCipherManager(nil, "")
 			// set key locally
-			testCipherMan.key[testOrg] = key
 			var err error
 			testCipherMan.aes[testOrg], err = cipher.CreateAesCipher(key)
 			Expect(err).Should(Succeed())
@@ -66,6 +65,8 @@
 			// set key server
 			server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 				defer GinkgoRecover()
+				Expect(r.URL.Path).Should(Equal(retrieveEncryptKeyPath))
+				Expect(r.URL.Query().Get(parameterOrganization)).Should(Equal(testOrg))
 				Expect(w.Write([]byte(base64.StdEncoding.EncodeToString(key)))).Should(Equal(24))
 			}))
 			time.Sleep(100 * time.Millisecond)
@@ -84,5 +85,39 @@
 		It("Decryption", func() {
 			Expect(testCipherMan.TryDecryptBase64(cipher64, testOrg)).Should(Equal(plaingtext))
 		})
+
+		It("Retrieve Key", func() {
+			testCipherMan.AddOrgs([]string{testOrg})
+			for {
+				time.Sleep(100 * time.Millisecond)
+				testCipherMan.mutex.RLock()
+				aesCipher := testCipherMan.aes[testOrg]
+				testCipherMan.mutex.RUnlock()
+				if aesCipher != nil {
+					//close server to make sure key was retrieved by "AddOrgs"
+					server.Close()
+					Expect(testCipherMan.EncryptBase64(plaingtext, testOrg, cipher.ModeEcb, cipher.PaddingPKCS5)).
+						Should(Equal(cipher64))
+					return
+				}
+			}
+		}, 2)
+	})
+
+	Context("IsEncrypted", func() {
+		It("IsEncrypted", func() {
+			testData := [][]interface{}{
+				{"{AES/ECB/PKCS5Padding}foo", true},
+				{"AES/ECB/PKCS5Padding}foo", false},
+				{"{AES/ECB/PKCS5Paddingfoo", false},
+				{"{AES/ECB/}foo", false},
+				{"{AES/PKCS5Padding}foo", false},
+				{"{AES//PKCS5Padding}foo", false},
+				{"foo", false},
+			}
+			for i := range testData {
+				Expect(IsEncrypted(testData[i][0].(string))).Should(Equal(testData[i][1]))
+			}
+		})
 	})
 })
diff --git a/verifyApiKey/data.go b/verifyApiKey/data.go
index c2169bb..a5d3708 100644
--- a/verifyApiKey/data.go
+++ b/verifyApiKey/data.go
@@ -68,17 +68,11 @@
 		return errors.New("InvalidApiKey")
 	}
 
-	email, err := dbc.CipherManager.TryDecryptBase64(dataWrapper.tempDeveloperDetails.Email,
-		dataWrapper.verifyApiKeyRequest.OrganizationName)
-	if err != nil {
-		return err
-	}
 	secret, err := dbc.CipherManager.TryDecryptBase64(dataWrapper.verifyApiKeySuccessResponse.ClientId.ClientSecret,
 		dataWrapper.verifyApiKeyRequest.OrganizationName)
 	if err != nil {
 		return err
 	}
-	dataWrapper.tempDeveloperDetails.Email = email
 	dataWrapper.verifyApiKeySuccessResponse.ClientId.ClientSecret = secret
 
 	if dataWrapper.verifyApiKeySuccessResponse.App.CallbackUrl != "" {
