diff --git a/commands/backup.go b/commands/backup.go
index fc5d509..de435fb 100644
--- a/commands/backup.go
+++ b/commands/backup.go
@@ -64,7 +64,7 @@
 }
 
 func (options *BackupCreate) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -162,7 +162,7 @@
 }
 
 func (options *BackupRestore) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
diff --git a/commands/command.go b/commands/command.go
index bdd7dfb..91d44a9 100644
--- a/commands/command.go
+++ b/commands/command.go
@@ -37,6 +37,8 @@
 	OUTPUT_TABLE OutputType = iota
 	OUTPUT_JSON
 	OUTPUT_YAML
+
+	CORE_VERSION_CONSTRAINT = ">= 3, < 4" // Support XOS major version 3
 )
 
 // Make it easy to override output stream for testing
diff --git a/commands/common.go b/commands/common.go
index f07e705..bb26273 100644
--- a/commands/common.go
+++ b/commands/common.go
@@ -20,6 +20,8 @@
 	b64 "encoding/base64"
 	"fmt"
 	"github.com/fullstorydev/grpcurl"
+	versionUtils "github.com/hashicorp/go-version"
+	"github.com/jhump/protoreflect/dynamic"
 	"github.com/jhump/protoreflect/grpcreflect"
 	"golang.org/x/net/context"
 	"google.golang.org/grpc"
@@ -30,6 +32,12 @@
 	"strings"
 )
 
+// Flags for calling the InitReflectionClient Method
+const (
+	INIT_DEFAULT          = 0
+	INIT_NO_VERSION_CHECK = 1 // Do not check whether server is allowed version
+)
+
 func GenerateHeaders() []string {
 	username := GlobalConfig.Username
 	password := GlobalConfig.Password
@@ -38,7 +46,34 @@
 	return headers
 }
 
-func InitReflectionClient() (*grpc.ClientConn, grpcurl.DescriptorSource, error) {
+// 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)
+	defer cancel()
+
+	headers := GenerateHeaders()
+
+	h := &RpcEventHandler{}
+	err := grpcurl.InvokeRPC(ctx, descriptor, conn, "xos.utility.GetVersion", headers, h, h.GetParams)
+	if err != nil {
+		return nil, err
+	}
+
+	if h.Status != nil && h.Status.Err() != nil {
+		return nil, h.Status.Err()
+	}
+
+	d, err := dynamic.AsDynamicMessage(h.Response)
+
+	return d, err
+}
+
+// Initialize client connection
+//    flags is a set of optional flags that may influence how the connection is setup
+//        INIT_DEFAULT - default behavior (0)
+//        INIT_NO_VERSION_CHECK - do not perform core version check
+
+func InitClient(flags uint32) (*grpc.ClientConn, grpcurl.DescriptorSource, error) {
 	conn, err := NewConnection()
 	if err != nil {
 		return nil, nil, err
@@ -61,6 +96,29 @@
 		descriptor = grpcurl.DescriptorSourceFromServer(context.Background(), refClient)
 	}
 
+	if flags&INIT_NO_VERSION_CHECK == 0 {
+		d, err := GetVersion(conn, descriptor)
+		if err != nil {
+			return nil, nil, err
+		}
+		// Note: NewVersion doesn't like the `-dev` suffix, so strip it off.
+		serverVersion, err := versionUtils.NewVersion(strings.Split(d.GetFieldByName("version").(string), "-")[0])
+		if err != nil {
+			return nil, nil, err
+		}
+
+		constraint, err := versionUtils.NewConstraint(CORE_VERSION_CONSTRAINT)
+		if err != nil {
+			return nil, nil, err
+		}
+
+		if !constraint.Check(serverVersion) {
+			return nil, nil, fmt.Errorf("Core version %s does not match constraint '%s'",
+				serverVersion, CORE_VERSION_CONSTRAINT)
+		}
+
+	}
+
 	return conn, descriptor, nil
 }
 
diff --git a/commands/models.go b/commands/models.go
index f95177e..49e85d8 100644
--- a/commands/models.go
+++ b/commands/models.go
@@ -248,7 +248,7 @@
 }
 
 func (options *ModelList) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -339,7 +339,7 @@
 }
 
 func (options *ModelUpdate) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -439,7 +439,7 @@
 }
 
 func (options *ModelDelete) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -466,7 +466,7 @@
 }
 
 func (options *ModelCreate) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -525,7 +525,7 @@
 }
 
 func (options *ModelSync) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -557,7 +557,7 @@
 }
 
 func (options *ModelSetDirty) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -585,7 +585,7 @@
 }
 
 func (modelName *ModelNameString) Complete(match string) []flags.Completion {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return nil
 	}
diff --git a/commands/modeltypes.go b/commands/modeltypes.go
index 4d2153a..e24a57a 100644
--- a/commands/modeltypes.go
+++ b/commands/modeltypes.go
@@ -40,7 +40,7 @@
 }
 
 func (options *ModelTypeList) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
diff --git a/commands/orm_test.go b/commands/orm_test.go
index 7ab30bf..1050de1 100644
--- a/commands/orm_test.go
+++ b/commands/orm_test.go
@@ -70,7 +70,7 @@
 }
 
 func TestTypeConvert(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -88,7 +88,7 @@
 }
 
 func TestCheckModelName(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -100,7 +100,7 @@
 }
 
 func TestCreateModel(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -115,7 +115,7 @@
 }
 
 func TestUpdateModel(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -128,7 +128,7 @@
 }
 
 func TestGetModel(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -140,7 +140,7 @@
 }
 
 func TestListModels(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -155,7 +155,7 @@
 }
 
 func TestFilterModels(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
@@ -170,7 +170,7 @@
 }
 
 func TestDeleteModel(t *testing.T) {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	assert.Equal(t, err, nil)
 	defer conn.Close()
 
diff --git a/commands/services.go b/commands/services.go
index e4a11cf..cc99dc5 100644
--- a/commands/services.go
+++ b/commands/services.go
@@ -48,7 +48,7 @@
 }
 
 func (options *ServiceList) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
diff --git a/commands/status.go b/commands/status.go
index 215d1bb..0924db4 100644
--- a/commands/status.go
+++ b/commands/status.go
@@ -42,7 +42,7 @@
 }
 
 func (options *StatusListOpts) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
diff --git a/commands/transfer.go b/commands/transfer.go
index 59be175..229f0fd 100644
--- a/commands/transfer.go
+++ b/commands/transfer.go
@@ -66,7 +66,7 @@
 
 func (options *TransferUpload) Execute(args []string) error {
 
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
@@ -110,7 +110,7 @@
 }
 
 func (options *TransferDownload) Execute(args []string) error {
-	conn, descriptor, err := InitReflectionClient()
+	conn, descriptor, err := InitClient(INIT_DEFAULT)
 	if err != nil {
 		return err
 	}
diff --git a/commands/version.go b/commands/version.go
index 44d7213..d650c59 100644
--- a/commands/version.go
+++ b/commands/version.go
@@ -17,11 +17,7 @@
 package commands
 
 import (
-	"context"
-
-	"github.com/fullstorydev/grpcurl"
 	flags "github.com/jessevdk/go-flags"
-	"github.com/jhump/protoreflect/dynamic"
 	"github.com/opencord/cordctl/cli/version"
 	"github.com/opencord/cordctl/format"
 )
@@ -105,28 +101,13 @@
 
 func (options *VersionOpts) Execute(args []string) error {
 	if !options.ClientOnly {
-		conn, descriptor, err := InitReflectionClient()
+		conn, descriptor, err := InitClient(INIT_NO_VERSION_CHECK)
 		if err != nil {
 			return err
 		}
 		defer conn.Close()
 
-		ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
-		defer cancel()
-
-		headers := GenerateHeaders()
-
-		h := &RpcEventHandler{}
-		err = grpcurl.InvokeRPC(ctx, descriptor, conn, "xos.utility.GetVersion", headers, h, h.GetParams)
-		if err != nil {
-			return err
-		}
-
-		if h.Status != nil && h.Status.Err() != nil {
-			return h.Status.Err()
-		}
-
-		d, err := dynamic.AsDynamicMessage(h.Response)
+		d, err := GetVersion(conn, descriptor)
 		if err != nil {
 			return err
 		}
