diff --git a/config/configs.go b/config/configs.go
new file mode 100644
index 0000000000000000000000000000000000000000..a2d37733bf31f40b6cdd895593b3cb2f54abacb1
--- /dev/null
+++ b/config/configs.go
@@ -0,0 +1,140 @@
+package config
+
+import (
+	"log"
+
+	"code.vereign.com/code/viam-apis/authentication"
+	"github.com/spf13/viper"
+)
+
+var SystemAuth = &authentication.Authentication{
+	Uuid:    "undefined",
+	Session: "undefined",
+}
+
+var CertificationMethod string
+var P PEMReader
+var CertificatePEM []byte
+var PrivateKeyPEM []byte
+var CaCertificatePEM []byte
+var VereignCaCertificatePEM []byte
+var VereignCaKeyPEM []byte
+
+var MaxMessageSize int
+
+var GrpcListenAddress string
+var RestListenAddress string
+var DataStorageUrl string
+var CertDir string
+
+func SetConfigValues() {
+	// Set Default Values For Config Variables
+
+	// Vereign API Related
+	viper.SetDefault("grpcListenAddress", "localhost:7877")
+	viper.SetDefault("restListenAddress", "localhost:7878")
+	viper.SetDefault("dataStorageUrl", "localhost:7777")
+
+	viper.SetDefault("viamUUID", "viam-system")
+	viper.SetDefault("viamSession", "viam-session")
+
+	viper.SetDefault("maxMessageSize", 64)
+
+	// Certification Related
+	// File System Defaults
+	viper.SetDefault("certificationMethod", "1")
+	viper.SetDefault("certificationURL", ".")
+	viper.SetDefault("certificationToken", ".")
+	viper.SetDefault("certificationPath", "cert")
+	viper.SetDefault("certificationCertFile", "server.crt")
+	viper.SetDefault("certificationKeyFile", "server.key")
+	viper.SetDefault("certificationCaCertFile", "ca.crt")
+	viper.SetDefault("certificationVereignCertFile", "vereign_ca.cer")
+	viper.SetDefault("certificationVereignKeyFile", "vereign_ca.key")
+
+	/*
+			// Vault Defaults
+			viper.SetDefault("certificationMethod", "2")
+			viper.SetDefault("certificationURL", "http://10.6.10.119:8200")
+			viper.SetDefault("certificationToken", "")
+			viper.SetDefault("certificationPath", "/developers/data/devteam/cert")
+		    viper.SetDefault("certificationCertFile", "certificateKey")
+			viper.SetDefault("certificationKeyFile", "privateKey")
+			viper.SetDefault("certificationCaCertFile", "caCertificateKey")
+			viper.SetDefault("certificationVereignCertFile", "vereignCaCertificateKey")
+			viper.SetDefault("certificationVereignKeyFile", "vereignCaPrivateKey")
+	*/
+
+	// Read Config File
+	viper.SetConfigName("config")
+	viper.AddConfigPath(".")
+	if err := viper.ReadInConfig(); err != nil {
+		log.Printf("can't read config: %s, will use default values", err)
+	}
+
+	CertificationMethod = viper.GetString("certificationMethod")
+	if CertificationMethod == "1" {
+		// Read From File System
+		P = FilePEMReader{certificationURL: viper.GetString("certificationURL"),
+			certificationToken:           viper.GetString("certificationToken"),
+			certificationPath:            viper.GetString("certificationPath"),
+			certificationCertFile:        viper.GetString("certificationCertFile"),
+			certificationKeyFile:         viper.GetString("certificationKeyFile"),
+			certificationCaCertFile:      viper.GetString("certificationCaCertFile"),
+			certificationVereignCertFile: viper.GetString("certificationVereignCertFile"),
+			certificationVereignKeyFile:  viper.GetString("certificationVereignKeyFile")}
+	} else if CertificationMethod == "2" {
+		// Read From Vault
+		P = VaultPEMReader{certificationURL: viper.GetString("certificationURL"),
+			certificationToken:           viper.GetString("certificationToken"),
+			certificationPath:            viper.GetString("certificationPath"),
+			certificationCertFile:        viper.GetString("certificationCertFile"),
+			certificationKeyFile:         viper.GetString("certificationKeyFile"),
+			certificationCaCertFile:      viper.GetString("certificationCaCertFile"),
+			certificationVereignCertFile: viper.GetString("certificationVereignCertFile"),
+			certificationVereignKeyFile:  viper.GetString("certificationVereignKeyFile")}
+	}
+
+	// Print all config values to log file
+	log.Printf("All Settings From Config:")
+	as := viper.AllSettings()
+	for key, _ := range as {
+		log.Printf("%s => %s", key, viper.GetString(key))
+	}
+
+	GrpcListenAddress = viper.GetString("grpcListenAddress")
+	RestListenAddress = viper.GetString("restListenAddress")
+
+	DataStorageUrl = viper.GetString("dataStorageUrl")
+
+	SystemAuth.Uuid = viper.GetString("viamUUID")
+	SystemAuth.Session = viper.GetString("viamSession")
+
+	MaxMessageSize = viper.GetInt("maxMessageSize")
+
+	CertificatePEM = GetCertificatePEM()
+	PrivateKeyPEM = GetPrivateKeyPEM()
+	CaCertificatePEM = GetCaCertificatePEM()
+	VereignCaCertificatePEM = GetVereignCaCertificatePEM()
+	VereignCaKeyPEM = GetVereignCaKeyPEM()
+}
+
+func GetCertificatePEM() []byte {
+	return P.readCertificatePEM()
+}
+
+func GetPrivateKeyPEM() []byte {
+	return P.readPrivateKeyPEM()
+}
+
+func GetCaCertificatePEM() []byte {
+	return P.readCaCertificatePEM()
+}
+
+func GetVereignCaCertificatePEM() []byte {
+	return P.readVereignCaCertificatePEM()
+}
+
+func GetVereignCaKeyPEM() []byte {
+	return P.readVereignCaKeyPEM()
+}
diff --git a/server/pem_reader.go b/config/pem_reader.go
similarity index 79%
rename from server/pem_reader.go
rename to config/pem_reader.go
index d6a11251631a9e42fcf43da350bd0687a3a71972..c40fae40f065e526dc65ff944ec8ecc9aec089c9 100644
--- a/server/pem_reader.go
+++ b/config/pem_reader.go
@@ -1,8 +1,9 @@
-package server
+package config
 
 import (
-	"log"
 	"io/ioutil"
+	"log"
+
 	vc "github.com/hashicorp/vault/api"
 )
 
@@ -15,70 +16,70 @@ type PEMReader interface {
 }
 
 type FilePEMReader struct {
-	certificationURL string
-	certificationToken string
-	certificationPath string
-	certificationCertFile string
-	certificationKeyFile string
-	certificationCaCertFile string
+	certificationURL             string
+	certificationToken           string
+	certificationPath            string
+	certificationCertFile        string
+	certificationKeyFile         string
+	certificationCaCertFile      string
 	certificationVereignCertFile string
-	certificationVereignKeyFile string
+	certificationVereignKeyFile  string
 }
 
 func (f FilePEMReader) readCertificatePEM() []byte {
 	pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationCertFile)
-    if err != nil {
+	if err != nil {
 		log.Printf("Error: %v", err)
-        return []byte("")
-    }
+		return []byte("")
+	}
 	return pem
 }
 
 func (f FilePEMReader) readPrivateKeyPEM() []byte {
-    pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationKeyFile)
-    if err != nil {
+	pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationKeyFile)
+	if err != nil {
 		log.Printf("Error: %v", err)
-        return []byte("")
-    }
+		return []byte("")
+	}
 	return pem
 }
 
 func (f FilePEMReader) readCaCertificatePEM() []byte {
-    pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationCaCertFile)
-    if err != nil {
+	pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationCaCertFile)
+	if err != nil {
 		log.Printf("Error: %v", err)
-        return []byte("")
-    }
+		return []byte("")
+	}
 	return pem
 }
 
 func (f FilePEMReader) readVereignCaCertificatePEM() []byte {
-    pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationVereignCertFile)
-    if err != nil {
+	pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationVereignCertFile)
+	if err != nil {
 		log.Printf("Error: %v", err)
-        return []byte("")
-    }
+		return []byte("")
+	}
 	return pem
 }
 
 func (f FilePEMReader) readVereignCaKeyPEM() []byte {
-    pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationVereignKeyFile)
-    if err != nil {
+	pem, err := ioutil.ReadFile(f.certificationPath + "/" + f.certificationVereignKeyFile)
+	if err != nil {
 		log.Printf("Error: %v", err)
-        return []byte("")
-    }
+		return []byte("")
+	}
 	return pem
 }
 
 type VaultPEMReader struct {
-	certificationURL string
-	certificationToken string
-	certificationPath string
-	certificationCertFile string
-	certificationKeyFile string
-	certificationCaCertFile string
+	certificationURL             string
+	certificationToken           string
+	certificationPath            string
+	certificationCertFile        string
+	certificationKeyFile         string
+	certificationCaCertFile      string
 	certificationVereignCertFile string
-	certificationVereignKeyFile string
+	certificationVereignKeyFile  string
 }
 
 func (v VaultPEMReader) readCertificatePEM() []byte {
@@ -97,7 +98,7 @@ func (v VaultPEMReader) readCertificatePEM() []byte {
 	if err != nil {
 		log.Printf("Error: VAULT Can't read value, %s", err)
 	}
-	
+
 	pemMap := secretValues.Data["data"].(map[string]interface{})
 
 	for propName, propValue := range pemMap {
@@ -124,7 +125,7 @@ func (v VaultPEMReader) readPrivateKeyPEM() []byte {
 	if err != nil {
 		log.Printf("Error: VAULT Can't read value, %s", err)
 	}
-	
+
 	pemMap := secretValues.Data["data"].(map[string]interface{})
 
 	for propName, propValue := range pemMap {
@@ -151,7 +152,7 @@ func (v VaultPEMReader) readCaCertificatePEM() []byte {
 	if err != nil {
 		log.Printf("Error: VAULT Can't read value, %s", err)
 	}
-	
+
 	pemMap := secretValues.Data["data"].(map[string]interface{})
 
 	for propName, propValue := range pemMap {
@@ -178,7 +179,7 @@ func (v VaultPEMReader) readVereignCaCertificatePEM() []byte {
 	if err != nil {
 		log.Printf("Error: VAULT Can't read value, %s", err)
 	}
-	
+
 	pemMap := secretValues.Data["data"].(map[string]interface{})
 
 	for propName, propValue := range pemMap {
@@ -205,7 +206,7 @@ func (v VaultPEMReader) readVereignCaKeyPEM() []byte {
 	if err != nil {
 		log.Printf("Error: VAULT Can't read value, %s", err)
 	}
-	
+
 	pemMap := secretValues.Data["data"].(map[string]interface{})
 
 	for propName, propValue := range pemMap {
@@ -214,4 +215,4 @@ func (v VaultPEMReader) readVereignCaKeyPEM() []byte {
 		}
 	}
 	return []byte("")
-}
\ No newline at end of file
+}
diff --git a/handler/generate_keypair.go b/handler/generate_keypair.go
index e9d4403806df659a34be139edf9d01a58611acb3..02a308034306550469dd1001d7160bea648f56ee 100644
--- a/handler/generate_keypair.go
+++ b/handler/generate_keypair.go
@@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 package handler
 
 import (
-	"log"
 	"crypto/aes"
 	"crypto/cipher"
 	"crypto/rand"
@@ -26,8 +25,9 @@ import (
 	"crypto/sha256"
 	"crypto/x509"
 	"encoding/pem"
+	"log"
 
-	"code.vereign.com/code/viam-apis/data-storage-agent/client"
+	keyutils "code.vereign.com/code/key-storage-agent/utils"
 	"code.vereign.com/code/viam-apis/key-storage-agent/api"
 	"code.vereign.com/code/viam-apis/utils"
 	"code.vereign.com/code/viam-apis/versions"
@@ -39,13 +39,12 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context,
 
 	auth := s.CreateAuthentication(ctx)
 
-	client := &client.DataStorageClientImpl{}
-	client.SetUpClient(auth, s.DataStorageUrl, s.CertPEM, s.KeyPEM, s.CaCertPEM, s.MaxMessageSize)
+	client := keyutils.CreateDataStorageClient(auth)
 	defer client.CloseClient()
 
 	generateKeyPairResponse := &api.GenerateKeyPairResponse{}
 
-	uuid, err := generateUnusedUUID(client)
+	uuid, err := keyutils.GenerateUnusedUUID(client)
 	if err != nil {
 		log.Printf("Error: %v", err)
 		generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList,
@@ -76,13 +75,13 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context,
 	encryptedPrivateKey := &api.Key{Content: encryptedPrivateKeyBytes}
 	result, errors, err := client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PRIVATE),
 		encryptedPrivateKey, versions.EntitiesManagementAgentApiVersion)
-	generateKeyPairResponse.StatusList = handlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
+	generateKeyPairResponse.StatusList = keyutils.HandlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
 
 	if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 {
 		publicKey := &api.Key{Content: publicKeyBytes}
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PUBLIC),
 			publicKey, versions.EntitiesManagementAgentApiVersion)
-		generateKeyPairResponse.StatusList = handlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
+		generateKeyPairResponse.StatusList = keyutils.HandlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
 	}
 
 	//duplicate logic of ReserveKeyUUID
@@ -90,7 +89,7 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context,
 		emptyKey := &api.Key{Content: []byte{}}
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_CERTIFICATE),
 			emptyKey, versions.EntitiesManagementAgentApiVersion)
-		generateKeyPairResponse.StatusList = handlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
+		generateKeyPairResponse.StatusList = keyutils.HandlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
 	}
 
 	if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 {
@@ -105,7 +104,7 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context,
 		encryptedAesKey := &api.Key{Content: encryptedAesKeyBytes}
 
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_AES), encryptedAesKey, versions.EntitiesManagementAgentApiVersion)
-		generateKeyPairResponse.StatusList = handlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
+		generateKeyPairResponse.StatusList = keyutils.HandlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
 	}
 
 	if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 {
@@ -120,7 +119,7 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context,
 		encryptedNonce := &api.Key{Content: encryptedPrivateKeyNonceBytes}
 
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_NONCE), encryptedNonce, versions.EntitiesManagementAgentApiVersion)
-		generateKeyPairResponse.StatusList = handlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
+		generateKeyPairResponse.StatusList = keyutils.HandlePutDataErrors(generateKeyPairResponse.StatusList, errors, err)
 	}
 
 	if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 {
@@ -177,7 +176,7 @@ func generateKeyPair(keySize int) ([]byte, []byte, error) {
 }
 
 func rsaEncryptWithServerKey(certPEM []byte, message []byte, label []byte) ([]byte, error) {
-	serverCertificate, err := readCertificateFromPEM(certPEM)
+	serverCertificate, err := keyutils.ReadCertificateFromPEM(certPEM)
 	if err != nil {
 		log.Printf("Error: %v", err)
 		return nil, err
diff --git a/handler/handler.go b/handler/handler.go
index a5f98c712e64c0d3e9bc910de0f2573278eba604..5babaa48885be2e31e60017a07c428d954fe6e93 100644
--- a/handler/handler.go
+++ b/handler/handler.go
@@ -24,8 +24,8 @@ import (
 	"code.vereign.com/code/viam-apis/versions"
 	"github.com/golang/protobuf/proto"
 
+	keyutils "code.vereign.com/code/key-storage-agent/utils"
 	"code.vereign.com/code/viam-apis/authentication"
-	"code.vereign.com/code/viam-apis/data-storage-agent/client"
 	"code.vereign.com/code/viam-apis/key-storage-agent/api"
 	"code.vereign.com/code/viam-apis/utils"
 	"golang.org/x/net/context"
@@ -34,13 +34,13 @@ import (
 
 // Server represents the gRPC server
 type KeyStorageServerImpl struct {
-	DataStorageUrl            string
-	CertPEM					  []byte
-	KeyPEM					  []byte
-	CaCertPEM				  []byte
-	VereignCertPEM       	  []byte
-	VereignPrivateKeyPEM	  []byte
-	MaxMessageSize			  int
+	DataStorageUrl       string
+	CertPEM              []byte
+	KeyPEM               []byte
+	CaCertPEM            []byte
+	VereignCertPEM       []byte
+	VereignPrivateKeyPEM []byte
+	MaxMessageSize       int
 }
 
 var version = "undefined"
@@ -64,8 +64,7 @@ func (s *KeyStorageServerImpl) CreateAuthentication(ctx context.Context) *authen
 func (s *KeyStorageServerImpl) GetKey(ctx context.Context, in *api.GetKeyRequest) (*api.GetKeyResponse, error) {
 	auth := s.CreateAuthentication(ctx)
 
-	client := &client.DataStorageClientImpl{}
-	client.SetUpClient(auth, s.DataStorageUrl, s.CertPEM, s.KeyPEM, s.CaCertPEM, s.MaxMessageSize)
+	client := keyutils.CreateDataStorageClient(auth)
 	defer client.CloseClient()
 
 	getKeyResponse := &api.GetKeyResponse{}
@@ -112,8 +111,7 @@ func (s *KeyStorageServerImpl) GetKey(ctx context.Context, in *api.GetKeyRequest
 func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest) (*api.SetKeyResponse, error) {
 	auth := s.CreateAuthentication(ctx)
 
-	client := &client.DataStorageClientImpl{}
-	client.SetUpClient(auth, s.DataStorageUrl, s.CertPEM, s.KeyPEM, s.CaCertPEM, s.MaxMessageSize)
+	client := keyutils.CreateDataStorageClient(auth)
 	defer client.CloseClient()
 
 	setKeyResponse := &api.SetKeyResponse{}
@@ -147,7 +145,7 @@ func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest
 	}
 
 	result, errors, err := client.DoPutDataCall("keys", in.Uuid+"/"+api.KeyType.String(in.KeyType), in.Key, versions.EntitiesManagementAgentApiVersion)
-	setKeyResponse.StatusList = handlePutDataErrors(setKeyResponse.StatusList, errors, err)
+	setKeyResponse.StatusList = keyutils.HandlePutDataErrors(setKeyResponse.StatusList, errors, err)
 
 	if setKeyResponse.StatusList == nil || len(setKeyResponse.StatusList) == 0 {
 		setKeyResponse.StatusList = utils.AddStatus(setKeyResponse.StatusList,
@@ -160,13 +158,12 @@ func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest
 func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.ReserveKeyUUIDRequest) (*api.ReserveKeyUUIDResponse, error) {
 	auth := s.CreateAuthentication(ctx)
 
-	client := &client.DataStorageClientImpl{}
-	client.SetUpClient(auth, s.DataStorageUrl, s.CertPEM, s.KeyPEM, s.CaCertPEM, s.MaxMessageSize)
+	client := keyutils.CreateDataStorageClient(auth)
 	defer client.CloseClient()
 
 	reserveKeyUUIDResponse := &api.ReserveKeyUUIDResponse{}
 
-	uuid, err := generateUnusedUUID(client)
+	uuid, err := keyutils.GenerateUnusedUUID(client)
 	if err != nil {
 		log.Printf("Error: %v", err)
 		reserveKeyUUIDResponse.StatusList = utils.AddStatus(reserveKeyUUIDResponse.StatusList,
@@ -178,16 +175,16 @@ func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.Reser
 	}
 
 	result, errors, err := client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PRIVATE), emptyKey, versions.EntitiesManagementAgentApiVersion)
-	reserveKeyUUIDResponse.StatusList = handlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
+	reserveKeyUUIDResponse.StatusList = keyutils.HandlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
 
 	if reserveKeyUUIDResponse.StatusList == nil || len(reserveKeyUUIDResponse.StatusList) == 0 {
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PUBLIC), emptyKey, versions.EntitiesManagementAgentApiVersion)
-		reserveKeyUUIDResponse.StatusList = handlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
+		reserveKeyUUIDResponse.StatusList = keyutils.HandlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
 	}
 
 	if reserveKeyUUIDResponse.StatusList == nil || len(reserveKeyUUIDResponse.StatusList) == 0 {
 		result, errors, err = client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_CERTIFICATE), emptyKey, versions.EntitiesManagementAgentApiVersion)
-		reserveKeyUUIDResponse.StatusList = handlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
+		reserveKeyUUIDResponse.StatusList = keyutils.HandlePutDataErrors(reserveKeyUUIDResponse.StatusList, errors, err)
 	}
 
 	if reserveKeyUUIDResponse.StatusList == nil || len(reserveKeyUUIDResponse.StatusList) == 0 {
@@ -202,4 +199,4 @@ func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.Reser
 func (s *KeyStorageServerImpl) GetVersionKSA(ctx context.Context, in *api.GetVersionKSAMessage) (*api.GetVersionKSAResponseMessage, error) {
 	log.Println("Version: " + version)
 	return &api.GetVersionKSAResponseMessage{Version: version, Errors: ""}, nil
-}
\ No newline at end of file
+}
diff --git a/handler/revoke.go b/handler/revoke.go
index a6ecda13aac32c8d67fe71b4eefd510cddff6cee..002c797b3b6d5979269da0153af61a6e798784f9 100644
--- a/handler/revoke.go
+++ b/handler/revoke.go
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 package handler
 
 import (
+	keyutils "code.vereign.com/code/key-storage-agent/utils"
 	"code.vereign.com/code/viam-apis/data-storage-agent/client"
 	"code.vereign.com/code/viam-apis/key-storage-agent/api"
 	"code.vereign.com/code/viam-apis/utils"
@@ -28,8 +29,7 @@ import (
 func (s *KeyStorageServerImpl) Revoke(ctx context.Context, in *api.RevokeRequest) (*api.RevokeResponse, error) {
 	auth := s.CreateAuthentication(ctx)
 
-	client := &client.DataStorageClientImpl{}
-	client.SetUpClient(auth, s.DataStorageUrl, s.CertPEM, s.KeyPEM, s.CaCertPEM, s.MaxMessageSize)
+	client := keyutils.CreateDataStorageClient(auth)
 	defer client.CloseClient()
 
 	revokeResponse := &api.RevokeResponse{}
@@ -55,7 +55,7 @@ func (s *KeyStorageServerImpl) Revoke(ctx context.Context, in *api.RevokeRequest
 
 func revokeKey(client *client.DataStorageClientImpl, uuid string, keyType api.KeyType) []*api.Status {
 
-	key, statusList := getKey(client, uuid, keyType)
+	key, statusList := keyutils.GetKey(client, uuid, keyType)
 	if statusList != nil {
 		return statusList
 	}
@@ -63,7 +63,7 @@ func revokeKey(client *client.DataStorageClientImpl, uuid string, keyType api.Ke
 	key.Revoked = true
 
 	_, errors, err := client.DoPutDataCall("keys", uuid+"/"+api.KeyType.String(keyType), key, versions.EntitiesManagementAgentApiVersion)
-	statusList = handlePutDataErrors(statusList, errors, err)
+	statusList = keyutils.HandlePutDataErrors(statusList, errors, err)
 	if statusList != nil && len(statusList) > 0 {
 		return statusList
 	}
diff --git a/main.go b/main.go
index d8679721b966c434632c11dee46fbbd86f0562c1..ff6754ee7753081f4d0ddcd9a86c2502743b99fe 100644
--- a/main.go
+++ b/main.go
@@ -20,24 +20,24 @@ package main
 import (
 	"log"
 
+	"code.vereign.com/code/key-storage-agent/config"
 	"code.vereign.com/code/key-storage-agent/server"
-	"github.com/spf13/viper"
 )
 
 // main start a gRPC server and waits for connection
 func main() {
-	server.SetConfigValues()
-
-	grpcAddress := viper.GetString("grpcListenAddress")
-	restAddress := viper.GetString("restListenAddress")
-	dataStorageAddress := viper.GetString("dataStorageUrl")
-	certPem := server.GetCertificatePEM()
-	keyPem := server.GetPrivateKeyPEM()
-	caCertPem := server.GetCaCertificatePEM()
-	vereignCaCertificatePem := server.GetVereignCaCertificatePEM()
-	vereignCaKeyPem := server.GetVereignCaKeyPEM()
-
-	maxMessageSize := viper.GetInt("maxMessageSize")
+	config.SetConfigValues()
+
+	grpcAddress := config.GrpcListenAddress
+	restAddress := config.RestListenAddress
+	dataStorageAddress := config.DataStorageUrl
+	certPem := config.CertificatePEM
+	keyPem := config.PrivateKeyPEM
+	caCertPem := config.CaCertificatePEM
+	vereignCaCertificatePem := config.VereignCaCertificatePEM
+	vereignCaKeyPem := config.VereignCaKeyPEM
+
+	maxMessageSize := config.MaxMessageSize
 
 	// fire the gRPC server in a goroutine
 	go func() {
diff --git a/server/configs.go b/server/configs.go
deleted file mode 100644
index 9cb3a86794d8595c0321caa8e1f4c4adb69a7f77..0000000000000000000000000000000000000000
--- a/server/configs.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package server
-
-import (
-	"log"
-	"github.com/spf13/viper"
-)
-
-var certificationMethod string
-var p PEMReader
-var certificatePEM []byte
-var privateKeyPEM []byte
-var caCertificatePEM []byte
-var vereignCaCertificatePEM []byte
-var vereignCaKeyPEM []byte
-
-func SetConfigValues() {
-	// Set Default Values For Config Variables
-
-	// Vereign API Related
-	viper.SetDefault("grpcListenAddress", "localhost:7877")
-	viper.SetDefault("restListenAddress", "localhost:7878")
-	viper.SetDefault("dataStorageUrl", "localhost:7777")
-
-	viper.SetDefault("viamUUID", "viam-system")
-	viper.SetDefault("viamSession", "viam-session")
-
-	viper.SetDefault("maxMessageSize", 64)
-
-	// Certification Related
-	// File System Defaults
-	viper.SetDefault("certificationMethod", "1")
-	viper.SetDefault("certificationURL", ".")
-	viper.SetDefault("certificationToken", ".")
-	viper.SetDefault("certificationPath", "cert")
-	viper.SetDefault("certificationCertFile", "server.crt")
-	viper.SetDefault("certificationKeyFile", "server.key")
-	viper.SetDefault("certificationCaCertFile", "ca.crt")
-	viper.SetDefault("certificationVereignCertFile", "vereign_ca.cer")
-	viper.SetDefault("certificationVereignKeyFile", "vereign_ca.key")
-
-	/*
-	// Vault Defaults
-	viper.SetDefault("certificationMethod", "2")
-	viper.SetDefault("certificationURL", "http://10.6.10.119:8200")
-	viper.SetDefault("certificationToken", "")
-	viper.SetDefault("certificationPath", "/developers/data/devteam/cert")
-    viper.SetDefault("certificationCertFile", "certificateKey")
-	viper.SetDefault("certificationKeyFile", "privateKey")
-	viper.SetDefault("certificationCaCertFile", "caCertificateKey")
-	viper.SetDefault("certificationVereignCertFile", "vereignCaCertificateKey")
-	viper.SetDefault("certificationVereignKeyFile", "vereignCaPrivateKey")
-	*/
-
-	// Read Config File
-	viper.SetConfigName("config")
-	viper.AddConfigPath(".")
-	if err := viper.ReadInConfig(); err != nil {
-		log.Printf("can't read config: %s, will use default values", err)
-	}
-
-	certificationMethod = viper.GetString("certificationMethod")
-	if certificationMethod == "1" {
-		// Read From File System
-		p = FilePEMReader{certificationURL: viper.GetString("certificationURL"),
-			certificationToken: viper.GetString("certificationToken"),
-			certificationPath: viper.GetString("certificationPath"),
-			certificationCertFile: viper.GetString("certificationCertFile"),
-			certificationKeyFile: viper.GetString("certificationKeyFile"),
-			certificationCaCertFile: viper.GetString("certificationCaCertFile"),
-			certificationVereignCertFile: viper.GetString("certificationVereignCertFile"),
-			certificationVereignKeyFile: viper.GetString("certificationVereignKeyFile")}
-	} else if certificationMethod == "2" {
-		// Read From Vault
-		p = VaultPEMReader{certificationURL: viper.GetString("certificationURL"),
-			certificationToken: viper.GetString("certificationToken"),
-			certificationPath: viper.GetString("certificationPath"),
-			certificationCertFile: viper.GetString("certificationCertFile"),
-			certificationKeyFile: viper.GetString("certificationKeyFile"),
-			certificationCaCertFile: viper.GetString("certificationCaCertFile"),
-			certificationVereignCertFile: viper.GetString("certificationVereignCertFile"),
-			certificationVereignKeyFile: viper.GetString("certificationVereignKeyFile")}
-	}
-
-	// Print all config values to log file
-	log.Printf("All Settings From Config:")
-	as := viper.AllSettings()
-	for key, _ := range as {
-	    log.Printf("%s => %s", key, viper.GetString(key))
-	}
-}
-
-func GetCertificatePEM() []byte {
-	return p.readCertificatePEM()
-}
-
-func GetPrivateKeyPEM() []byte {
-	return p.readPrivateKeyPEM()
-}
-
-func GetCaCertificatePEM() []byte {
-	return p.readCaCertificatePEM()
-}
-
-func GetVereignCaCertificatePEM() []byte {
-	return p.readVereignCaCertificatePEM()
-}
-
-func GetVereignCaKeyPEM() []byte {
-	return p.readVereignCaKeyPEM()
-}
\ No newline at end of file
diff --git a/server/server.go b/server/server.go
index 654be0e361c695c445361b345866bf79f1bdf847..0bd5ab73423e117b5cf7679603827a30038a5ffa 100644
--- a/server/server.go
+++ b/server/server.go
@@ -18,24 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
 import (
+	"crypto/tls"
+	"crypto/x509"
 	"fmt"
 	"log"
 	"net"
 	"net/http"
 	"strings"
-	"crypto/x509"
-	"crypto/tls"
-	"github.com/grpc-ecosystem/grpc-gateway/runtime"
-	"golang.org/x/net/context"
+
+	"code.vereign.com/code/key-storage-agent/config"
 	"code.vereign.com/code/key-storage-agent/handler"
 	"code.vereign.com/code/key-storage-agent/session"
+	"code.vereign.com/code/key-storage-agent/utils"
 	"code.vereign.com/code/viam-apis/authentication"
-	"code.vereign.com/code/viam-apis/data-storage-agent/client"
 	api "code.vereign.com/code/viam-apis/key-storage-agent/api"
+	"github.com/grpc-ecosystem/grpc-gateway/runtime"
+	"golang.org/x/net/context"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials"
 	"google.golang.org/grpc/metadata"
-	"github.com/spf13/viper"
 )
 
 // private type for Context keys
@@ -66,12 +67,11 @@ func authenticateClient(ctx context.Context, s *handler.KeyStorageServerImpl, in
 		}
 
 		viamAuth := &authentication.Authentication{
-			Uuid:    viper.GetString("viamUUID"),
-			Session: viper.GetString("viamSession"),
+			Uuid:    config.SystemAuth.Uuid,
+			Session: config.SystemAuth.Session,
 		}
 
-		sessionClient := &client.DataStorageClientImpl{}
-		sessionClient.SetUpClient(viamAuth, viper.GetString("dataStorageUrl"), pkgCertPEM, pkgKeyPEM, pkgCaCertPEM, viper.GetInt("maxMessageSize"))
+		sessionClient := utils.CreateDataStorageClient(viamAuth)
 		defer sessionClient.CloseClient()
 
 		if clientAuth.Uuid == viamAuth.Uuid {
@@ -123,46 +123,46 @@ func StartGRPCServer(address string, certPEM, privateKeyPEM, caCertPEM, vereignC
 
 	// create a server instance
 	s := handler.KeyStorageServerImpl{
-		DataStorageUrl:         dataStorageAddress,
-		CertPEM:              	certPEM,
-		KeyPEM:			   		privateKeyPEM,
-		CaCertPEM:			   	caCertPEM,
-		VereignCertPEM:       	vereignCertPEM,
-		VereignPrivateKeyPEM: 	vereignPrivateKeyPEM,
-		MaxMessageSize:			maxMessageSize,
+		DataStorageUrl:       dataStorageAddress,
+		CertPEM:              certPEM,
+		KeyPEM:               privateKeyPEM,
+		CaCertPEM:            caCertPEM,
+		VereignCertPEM:       vereignCertPEM,
+		VereignPrivateKeyPEM: vereignPrivateKeyPEM,
+		MaxMessageSize:       maxMessageSize,
 	}
 
 	// Load the certificates from PEM Strings
-    certificate, err := tls.X509KeyPair(certPEM, privateKeyPEM)
-    
+	certificate, err := tls.X509KeyPair(certPEM, privateKeyPEM)
+
 	if err != nil {
 		log.Printf("Error: %v", err)
 		return fmt.Errorf("could not load server key pair: %s", err)
 	}
 
 	// Create a certificate pool from the certificate authority
-    // Get the SystemCertPool, continue with an empty pool on error
+	// Get the SystemCertPool, continue with an empty pool on error
 	certPool, _ := x509.SystemCertPool()
 	if certPool == nil {
 		certPool = x509.NewCertPool()
 	}
-	
+
 	if ok := certPool.AppendCertsFromPEM(caCertPEM); !ok {
-        return fmt.Errorf("failed to append server certs")
-    }
+		return fmt.Errorf("failed to append server certs")
+	}
 
-    // Create the TLS credentials
-    creds := credentials.NewTLS(&tls.Config{
-    	//ClientAuth:   tls.RequireAndVerifyClientCert,
-    	Certificates: []tls.Certificate{certificate},
-    	ClientCAs:    certPool,
-    })
+	// Create the TLS credentials
+	creds := credentials.NewTLS(&tls.Config{
+		//ClientAuth:   tls.RequireAndVerifyClientCert,
+		Certificates: []tls.Certificate{certificate},
+		ClientCAs:    certPool,
+	})
 
 	// Create an array of gRPC options with the credentials
 	opts := []grpc.ServerOption{
 		grpc.Creds(creds),
-		grpc.UnaryInterceptor(unaryInterceptor), 
-		grpc.MaxRecvMsgSize(viper.GetInt("maxMessageSize")*1024*1024),
+		grpc.UnaryInterceptor(unaryInterceptor),
+		grpc.MaxRecvMsgSize(config.MaxMessageSize * 1024 * 1024),
 	}
 
 	// create a gRPC server object
@@ -193,9 +193,9 @@ func StartRESTServer(address, grpcAddress string, certPEM []byte) error {
 	}
 
 	// Append the client certificates from the CA
-    if ok := certPool.AppendCertsFromPEM(certPEM); !ok {
-        return fmt.Errorf("failed to append client certs")
-    }
+	if ok := certPool.AppendCertsFromPEM(certPEM); !ok {
+		return fmt.Errorf("failed to append client certs")
+	}
 
 	creds := credentials.NewClientTLSFromCert(certPool, "")
 
diff --git a/handler/utils.go b/utils/utils.go
similarity index 73%
rename from handler/utils.go
rename to utils/utils.go
index 6624e77f6778542f7b37743f32ac1989edf21dff..1184090980508d157fe292dd65a4590da7fa7ba8 100644
--- a/handler/utils.go
+++ b/utils/utils.go
@@ -15,28 +15,33 @@ You should have received a copy of the GNU Affero General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
-package handler
+package utils
 
 import (
 	"crypto/rand"
 	"crypto/x509"
 	"errors"
 	"fmt"
-	"log"
 	"io"
+	"log"
+
+	"encoding/pem"
+	"io/ioutil"
 
+	"code.vereign.com/code/key-storage-agent/config"
+	"code.vereign.com/code/viam-apis/authentication"
+	"code.vereign.com/code/viam-apis/clientutils"
 	"code.vereign.com/code/viam-apis/data-storage-agent/client"
+	dsclient "code.vereign.com/code/viam-apis/data-storage-agent/client"
 	"code.vereign.com/code/viam-apis/key-storage-agent/api"
 	"code.vereign.com/code/viam-apis/utils"
 	"github.com/golang/protobuf/proto"
-	"encoding/pem"
-	"io/ioutil"
 )
 
-func generateUnusedUUID(client *client.DataStorageClientImpl) (string, error) {
+func GenerateUnusedUUID(client *client.DataStorageClientImpl) (string, error) {
 	count := 0
 	for {
-		uuid, err := newUUID()
+		uuid, err := NewUUID()
 
 		// check that uuid is not used
 		data, _ := client.DoGetDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PRIVATE))
@@ -51,7 +56,7 @@ func generateUnusedUUID(client *client.DataStorageClientImpl) (string, error) {
 	}
 }
 
-func newUUID() (string, error) {
+func NewUUID() (string, error) {
 	uuid := make([]byte, 16)
 	n, err := io.ReadFull(rand.Reader, uuid)
 	if n != len(uuid) || err != nil {
@@ -64,7 +69,7 @@ func newUUID() (string, error) {
 	return fmt.Sprintf("%x-%x-%x-%x-%x", uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]), nil
 }
 
-func handlePutDataErrors(statusList []*api.Status, errors string, err error) []*api.Status {
+func HandlePutDataErrors(statusList []*api.Status, errors string, err error) []*api.Status {
 	if err != nil {
 		log.Printf("Error: %v", err)
 		statusList = utils.AddStatus(statusList, "500", api.StatusType_ERROR, err.Error())
@@ -75,8 +80,8 @@ func handlePutDataErrors(statusList []*api.Status, errors string, err error) []*
 	return statusList
 }
 
-func readCertificateFromPEM(pemString []byte) (*x509.Certificate, error) {
-	certificatePemBlock, err := readPemBlockFromBytes(pemString)
+func ReadCertificateFromPEM(pemString []byte) (*x509.Certificate, error) {
+	certificatePemBlock, err := ReadPemBlockFromBytes(pemString)
 	if err != nil {
 		log.Printf("Error: %v", err)
 		return nil, err
@@ -91,7 +96,7 @@ func readCertificateFromPEM(pemString []byte) (*x509.Certificate, error) {
 	return certificate, nil
 }
 
-func readPemBlockFromBytes(pemString []byte) (*pem.Block, error) {
+func ReadPemBlockFromBytes(pemString []byte) (*pem.Block, error) {
 	fileBytes := pemString
 
 	certificatePemBlock, _ := pem.Decode(fileBytes)
@@ -99,8 +104,8 @@ func readPemBlockFromBytes(pemString []byte) (*pem.Block, error) {
 	return certificatePemBlock, nil
 }
 
-func readCertificateFromFile(fileName string) (*x509.Certificate, error) {
-	certificatePemBlock, err := readPemBlockFromFile(fileName)
+func ReadCertificateFromFile(fileName string) (*x509.Certificate, error) {
+	certificatePemBlock, err := ReadPemBlockFromFile(fileName)
 	if err != nil {
 		log.Printf("Error: %v", err)
 		return nil, err
@@ -115,7 +120,7 @@ func readCertificateFromFile(fileName string) (*x509.Certificate, error) {
 	return certificate, nil
 }
 
-func readPemBlockFromFile(fileName string) (*pem.Block, error) {
+func ReadPemBlockFromFile(fileName string) (*pem.Block, error) {
 	fileBytes, err := ioutil.ReadFile(fileName)
 	if err != nil {
 		log.Printf("Error: %v", err)
@@ -127,7 +132,7 @@ func readPemBlockFromFile(fileName string) (*pem.Block, error) {
 	return certificatePemBlock, nil
 }
 
-func getKey(client *client.DataStorageClientImpl, uuid string, keyType api.KeyType) (*api.Key, []*api.Status) {
+func GetKey(client *client.DataStorageClientImpl, uuid string, keyType api.KeyType) (*api.Key, []*api.Status) {
 	statusList := []*api.Status{}
 
 	data, _ := client.DoGetDataCall("keys", uuid+"/"+api.KeyType.String(keyType))
@@ -141,3 +146,8 @@ func getKey(client *client.DataStorageClientImpl, uuid string, keyType api.KeyTy
 
 	return key, nil
 }
+
+func CreateDataStorageClient(auth *authentication.Authentication) *dsclient.DataStorageClientImpl {
+	return clientutils.CreateDataStorageClient(auth, config.DataStorageUrl, config.CertificatePEM,
+		config.PrivateKeyPEM, config.CaCertificatePEM, config.MaxMessageSize)
+}