diff --git a/internal/pkg/commands/command.go b/internal/pkg/commands/command.go
index 45ccd5d..51f8d01 100644
--- a/internal/pkg/commands/command.go
+++ b/internal/pkg/commands/command.go
@@ -19,17 +19,15 @@
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/opencord/cordctl/internal/pkg/config"
+	corderrors "github.com/opencord/cordctl/internal/pkg/error"
 	"github.com/opencord/cordctl/pkg/format"
 	"github.com/opencord/cordctl/pkg/order"
 	"google.golang.org/grpc"
 	"gopkg.in/yaml.v2"
 	"io"
-	"io/ioutil"
-	"log"
 	"os"
 	"strings"
-	"time"
-	"net"
 )
 
 type OutputType uint8
@@ -47,52 +45,6 @@
 
 var CharReplacer = strings.NewReplacer("\\t", "\t", "\\n", "\n")
 
-type GrpcConfigSpec struct {
-	Timeout time.Duration `yaml:"timeout"`
-}
-
-type TlsConfigSpec struct {
-	UseTls bool   `yaml:"useTls"`
-	CACert string `yaml:"caCert"`
-	Cert   string `yaml:"cert"`
-	Key    string `yaml:"key"`
-	Verify string `yaml:"verify"`
-}
-
-type GlobalConfigSpec struct {
-	Server   string        `yaml:"server"`
-	Username string        `yaml:"username"`
-	Password string        `yaml:"password"`
-	Protoset string        `yaml:"protoset"`
-	Tls      TlsConfigSpec `yaml:"tls"`
-	Grpc     GrpcConfigSpec
-}
-
-var GlobalConfig = GlobalConfigSpec{
-	Server: "localhost",
-	Tls: TlsConfigSpec{
-		UseTls: false,
-	},
-	Grpc: GrpcConfigSpec{
-		Timeout: time.Second * 10,
-	},
-}
-
-var GlobalOptions struct {
-	Config   string `short:"c" long:"config" env:"CORDCONFIG" value-name:"FILE" default:"" description:"Location of client config file"`
-	Server   string `short:"s" long:"server" default:"" value-name:"SERVER:PORT" description:"IP/Host and port of XOS"`
-	Username string `short:"u" long:"username" value-name:"USERNAME" default:"" description:"Username to authenticate with XOS"`
-	Password string `short:"p" long:"password" value-name:"PASSWORD" default:"" description:"Password to authenticate with XOS"`
-	Protoset string `long:"protoset" value-name:"FILENAME" description:"Load protobuf definitions from protoset instead of reflection api"`
-	Debug    bool   `short:"d" long:"debug" description:"Enable debug mode"`
-	UseTLS   bool   `long:"tls" description:"Use TLS"`
-	CACert   string `long:"tlscacert" value-name:"CA_CERT_FILE" description:"Trust certs signed only by this CA"`
-	Cert     string `long:"tlscert" value-name:"CERT_FILE" description:"Path to TLS vertificate file"`
-	Key      string `long:"tlskey" value-name:"KEY_FILE" description:"Path to TLS key file"`
-	Verify   bool   `long:"tlsverify" description:"Use TLS and verify the remote"`
-	Yes      bool   `short:"y" long:"yes" description:"answer yes to any confirmation prompts"`
-}
-
 type OutputOptions struct {
 	Format   string `long:"format" value-name:"FORMAT" default:"" description:"Format to use to output structured data"`
 	Quiet    bool   `short:"q" long:"quiet" description:"Output only the IDs of the objects"`
@@ -124,85 +76,10 @@
 	Data     interface{}
 }
 
-type config struct {
-	Server string `yaml:"server"`
-}
-
-func ProcessGlobalOptions() {
-	if len(GlobalOptions.Config) == 0 {
-		home, err := os.UserHomeDir()
-		if err != nil {
-			log.Printf("Unable to discover the users home directory: %s\n", err)
-		}
-		GlobalOptions.Config = fmt.Sprintf("%s/.cord/config", home)
-	}
-
-	info, err := os.Stat(GlobalOptions.Config)
-	if err == nil && !info.IsDir() {
-		configFile, err := ioutil.ReadFile(GlobalOptions.Config)
-		if err != nil {
-			log.Printf("configFile.Get err   #%v ", err)
-		}
-		err = yaml.Unmarshal(configFile, &GlobalConfig)
-		if err != nil {
-			log.Fatalf("Unmarshal: %v", err)
-		}
-	}
-
-	// Override from environment
-	//    in particualr, for passing env vars via `go test`
-	env_server, present := os.LookupEnv("CORDCTL_SERVER")
-	if present {
-		GlobalConfig.Server = env_server
-	}
-	env_username, present := os.LookupEnv("CORDCTL_USERNAME")
-	if present {
-		GlobalConfig.Username = env_username
-	}
-	env_password, present := os.LookupEnv("CORDCTL_PASSWORD")
-	if present {
-		GlobalConfig.Password = env_password
-	}
-	env_protoset, present := os.LookupEnv("CORDCTL_PROTOSET")
-	if present {
-		GlobalConfig.Protoset = env_protoset
-	}
-
-	// Override from command line
-	if GlobalOptions.Server != "" {
-		GlobalConfig.Server = GlobalOptions.Server
-	}
-	if GlobalOptions.Username != "" {
-		GlobalConfig.Username = GlobalOptions.Username
-	}
-	if GlobalOptions.Password != "" {
-		GlobalConfig.Password = GlobalOptions.Password
-	}
-	if GlobalOptions.Protoset != "" {
-		GlobalConfig.Protoset = GlobalOptions.Protoset
-	}
-
-	// Generate error messages for required settings
-	if GlobalConfig.Server == "" {
-		log.Fatal("Server is not set. Please update config file or use the -s option")
-	}
-	if GlobalConfig.Username == "" {
-		log.Fatal("Username is not set. Please update config file or use the -u option")
-	}
-	if GlobalConfig.Password == "" {
-		log.Fatal("Password is not set. Please update config file or use the -p option")
-	}
-	//Try to resolve hostname if provided for the server
-	if host, port, err := net.SplitHostPort(GlobalConfig.Server); err == nil {
-		if addrs, err := net.LookupHost(host); err == nil {
-			GlobalConfig.Server = net.JoinHostPort(addrs[0], port)
-		}
-	}
-}
-
 func NewConnection() (*grpc.ClientConn, error) {
-	ProcessGlobalOptions()
-	return grpc.Dial(GlobalConfig.Server, grpc.WithInsecure())
+	config.ProcessGlobalOptions()
+	clientConn, err := grpc.Dial(config.GlobalConfig.Server, grpc.WithInsecure())
+	return clientConn, corderrors.RpcErrorToCordError(err)
 }
 
 func GenerateOutput(result *CommandResult) {
diff --git a/internal/pkg/commands/common.go b/internal/pkg/commands/common.go
index 6f795e4..4629534 100644
--- a/internal/pkg/commands/common.go
+++ b/internal/pkg/commands/common.go
@@ -23,6 +23,7 @@
 	versionUtils "github.com/hashicorp/go-version"
 	"github.com/jhump/protoreflect/dynamic"
 	"github.com/jhump/protoreflect/grpcreflect"
+	"github.com/opencord/cordctl/internal/pkg/config"
 	corderrors "github.com/opencord/cordctl/internal/pkg/error"
 	"golang.org/x/net/context"
 	"google.golang.org/grpc"
@@ -39,8 +40,8 @@
 )
 
 func GenerateHeaders() []string {
-	username := GlobalConfig.Username
-	password := GlobalConfig.Password
+	username := config.GlobalConfig.Username
+	password := config.GlobalConfig.Password
 	sEnc := b64.StdEncoding.EncodeToString([]byte(username + ":" + password))
 	headers := []string{"authorization: basic " + sEnc}
 	return headers
@@ -48,7 +49,7 @@
 
 // Perform the GetVersion API call on the core to get the version
 func GetVersion(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource) (*dynamic.Message, error) {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -87,8 +88,8 @@
 	// support the reflection API.
 
 	var descriptor grpcurl.DescriptorSource
-	if GlobalConfig.Protoset != "" {
-		descriptor, err = grpcurl.DescriptorSourceFromProtoSets(GlobalConfig.Protoset)
+	if config.GlobalConfig.Protoset != "" {
+		descriptor, err = grpcurl.DescriptorSourceFromProtoSets(config.GlobalConfig.Protoset)
 		if err != nil {
 			return nil, nil, err
 		}
@@ -142,7 +143,7 @@
 
 // Print a confirmation prompt and get a response from the user
 func Confirmf(format string, args ...interface{}) bool {
-	if GlobalOptions.Yes {
+	if config.GlobalOptions.Yes {
 		return true
 	}
 
@@ -166,3 +167,8 @@
 		}
 	}
 }
+
+// Returns a context used for gRPC timeouts
+func GrpcTimeoutContext(ctx context.Context) (context.Context, context.CancelFunc) {
+	return context.WithTimeout(ctx, config.GlobalConfig.Grpc.Timeout)
+}
diff --git a/internal/pkg/commands/config.go b/internal/pkg/commands/config.go
index 81875a5..f5ede01 100644
--- a/internal/pkg/commands/config.go
+++ b/internal/pkg/commands/config.go
@@ -19,6 +19,7 @@
 import (
 	"fmt"
 	flags "github.com/jessevdk/go-flags"
+	"github.com/opencord/cordctl/internal/pkg/config"
 	"gopkg.in/yaml.v2"
 )
 
@@ -49,8 +50,8 @@
 
 func (options *ConfigOptions) Execute(args []string) error {
 	//GlobalConfig
-	ProcessGlobalOptions()
-	b, err := yaml.Marshal(GlobalConfig)
+	config.ProcessGlobalOptions()
+	b, err := yaml.Marshal(config.GlobalConfig)
 	if err != nil {
 		return err
 	}
diff --git a/internal/pkg/commands/orm.go b/internal/pkg/commands/orm.go
index 0ac846a..d09f15d 100644
--- a/internal/pkg/commands/orm.go
+++ b/internal/pkg/commands/orm.go
@@ -261,7 +261,7 @@
 
 // Create a model in XOS given a map of fields
 func CreateModel(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, fields map[string]interface{}) error {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -292,7 +292,7 @@
 
 // Update a model in XOS given a map of fields
 func UpdateModel(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, fields map[string]interface{}) error {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -320,7 +320,7 @@
 
 // Get a model from XOS given its ID
 func GetModel(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, id int32) (*dynamic.Message, error) {
-	ctx, cancel := context.WithTimeout(ctx, GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -432,7 +432,7 @@
 
 // List all objects of a given model
 func ListModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string) ([]*dynamic.Message, error) {
-	ctx, cancel := context.WithTimeout(ctx, GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -465,7 +465,7 @@
 //   For example,
 //     map[string]string{"name": "==mysite"}
 func FilterModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, kind string, queries map[string]string) ([]*dynamic.Message, error) {
-	ctx, cancel := context.WithTimeout(ctx, GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -613,7 +613,7 @@
 
 // Get a model from XOS given its ID
 func DeleteModel(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, id int32) error {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
diff --git a/internal/pkg/commands/services.go b/internal/pkg/commands/services.go
index d199ee9..f3372b9 100644
--- a/internal/pkg/commands/services.go
+++ b/internal/pkg/commands/services.go
@@ -55,7 +55,7 @@
 	}
 	defer conn.Close()
 
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
diff --git a/internal/pkg/commands/status.go b/internal/pkg/commands/status.go
index 802720a..2d62fe3 100644
--- a/internal/pkg/commands/status.go
+++ b/internal/pkg/commands/status.go
@@ -49,7 +49,7 @@
 	}
 	defer conn.Close()
 
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
diff --git a/internal/pkg/commands/transfer_handler.go b/internal/pkg/commands/transfer_handler.go
index cc18f1b..32b63fb 100644
--- a/internal/pkg/commands/transfer_handler.go
+++ b/internal/pkg/commands/transfer_handler.go
@@ -102,7 +102,7 @@
 }
 
 func UploadFile(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, local_name string, uri string, chunkSize int) (*UploadHandler, *dynamic.Message, error) {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
@@ -133,7 +133,7 @@
 }
 
 func DownloadFile(conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, uri string, local_name string) (*DownloadHandler, error) {
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	ctx, cancel := GrpcTimeoutContext(context.Background())
 	defer cancel()
 
 	headers := GenerateHeaders()
