diff --git a/Makefile b/Makefile
index 1f7edc5..b25a304 100644
--- a/Makefile
+++ b/Makefile
@@ -30,18 +30,20 @@
 BUILDTIME    = $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
 
 LDFLAGS      = -ldflags \
-	'-X "github.com/opencord/cordctl/cli/version.Version=$(VERSION)"  \
-	 -X "github.com/opencord/cordctl/cli/version.GitCommit=$(GITCOMMIT)"  \
-	 -X "github.com/opencord/cordctl/cli/version.GitDirty=$(GITDIRTY)"  \
-	 -X "github.com/opencord/cordctl/cli/version.GoVersion=$(GOVERSION)"  \
-	 -X "github.com/opencord/cordctl/cli/version.Os=$$GOOS" \
-	 -X "github.com/opencord/cordctl/cli/version.Arch=$$GOARCH" \
-	 -X "github.com/opencord/cordctl/cli/version.BuildTime=$(BUILDTIME)"'
+	"-X github.com/opencord/cordctl/cli/version.Version=$(VERSION)  \
+	 -X github.com/opencord/cordctl/cli/version.GitCommit=$(GITCOMMIT)  \
+	 -X github.com/opencord/cordctl/cli/version.GitDirty=$(GITDIRTY)  \
+	 -X github.com/opencord/cordctl/cli/version.GoVersion=$(GOVERSION)  \
+	 -X github.com/opencord/cordctl/cli/version.Os=$$GOOS \
+	 -X github.com/opencord/cordctl/cli/version.Arch=$$GOARCH \
+	 -X github.com/opencord/cordctl/cli/version.BuildTime=$(BUILDTIME)"
 
 help:
 
 build: dependencies
-	GOOS=$(HOST_OS) GOARCH=$(HOST_ARCH) go build $(LDFLAGS) cmd/cordctl.go
+	export GOOS=$(HOST_OS) ;\
+	export GOARCH=$(HOST_ARCH) ;\
+	go build $(LDFLAGS) cmd/cordctl.go
 
 dependencies:
 	[ -d "vendor" ] || dep ensure
@@ -73,7 +75,9 @@
 rel_arch  = $(word 3, $(subst -, ,$(notdir $@)))
 
 $(RELEASE_BINS): dependencies
-	GOOS=$(rel_os) GOARCH=$(rel_arch) go build -v $(LDFLAGS) -o "$@" cmd/cordctl.go
+	export GOOS=$(rel_os) ;\
+	export GOARCH=$(rel_arch) ;\
+	go build -v $(LDFLAGS) -o "$@" cmd/cordctl.go
 
 release: $(RELEASE_BINS)
 
diff --git a/commands/version.go b/commands/version.go
index 4af5a8a..1941589 100644
--- a/commands/version.go
+++ b/commands/version.go
@@ -18,6 +18,7 @@
 
 import (
 	"context"
+
 	"github.com/fullstorydev/grpcurl"
 	flags "github.com/jessevdk/go-flags"
 	"github.com/jhump/protoreflect/dynamic"
@@ -50,7 +51,8 @@
 }
 
 type VersionOpts struct {
-	OutputAs string `short:"o" long:"outputas" default:"table" choice:"table" choice:"json" choice:"yaml" description:"Type of output to generate"`
+	OutputAs   string `short:"o" long:"outputas" default:"table" choice:"table" choice:"json" choice:"yaml" description:"Type of output to generate"`
+	ClientOnly bool   `short:"c" long:"client-only" description:"Print only client version"`
 }
 
 var versionOpts = VersionOpts{}
@@ -79,14 +81,15 @@
 	parent.AddCommand("version", "display version", "Display client version", &versionOpts)
 }
 
-const DefaultFormat = `Client:
+const ClientFormat = `Client:
  Version         {{.Client.Version}}
  Go version:     {{.Client.GoVersion}}
  Git commit:     {{.Client.GitCommit}}
  Git dirty:      {{.Client.GitDirty}}
  Built:          {{.Client.BuildTime}}
  OS/Arch:        {{.Client.Os}}/{{.Client.Arch}}
-
+`
+const ServerFormat = `
 Server:
  Version         {{.Server.Version}}
  Python version: {{.Server.PythonVersion}}
@@ -95,51 +98,62 @@
  OS/Arch:        {{.Server.Os}}/{{.Server.Arch}}
 `
 
+const DefaultFormat = ClientFormat + ServerFormat
+
 func (options *VersionOpts) Execute(args []string) error {
-	conn, err := NewConnection()
-	if err != nil {
-		return err
+
+	if !options.ClientOnly {
+		conn, err := NewConnection()
+		if err != nil {
+			return err
+		}
+		defer conn.Close()
+
+		descriptor, method, err := GetReflectionMethod(conn, "xos.utility.GetVersion")
+		if err != nil {
+			return err
+		}
+
+		ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+		defer cancel()
+
+		headers := GenerateHeaders()
+
+		h := &RpcEventHandler{}
+		err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, 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)
+		if err != nil {
+			return err
+		}
+
+		versionInfo.Server.Version = d.GetFieldByName("version").(string)
+		versionInfo.Server.PythonVersion = d.GetFieldByName("pythonVersion").(string)
+		versionInfo.Server.GitCommit = d.GetFieldByName("gitCommit").(string)
+		versionInfo.Server.BuildTime = d.GetFieldByName("buildTime").(string)
+		versionInfo.Server.Os = d.GetFieldByName("os").(string)
+		versionInfo.Server.Arch = d.GetFieldByName("arch").(string)
 	}
-	defer conn.Close()
-
-	descriptor, method, err := GetReflectionMethod(conn, "xos.utility.GetVersion")
-	if err != nil {
-		return err
-	}
-
-	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
-	defer cancel()
-
-	headers := GenerateHeaders()
-
-	h := &RpcEventHandler{}
-	err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, 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)
-	if err != nil {
-		return err
-	}
-
-	versionInfo.Server.Version = d.GetFieldByName("version").(string)
-	versionInfo.Server.PythonVersion = d.GetFieldByName("pythonVersion").(string)
-	versionInfo.Server.GitCommit = d.GetFieldByName("gitCommit").(string)
-	versionInfo.Server.BuildTime = d.GetFieldByName("buildTime").(string)
-	versionInfo.Server.Os = d.GetFieldByName("os").(string)
-	versionInfo.Server.Arch = d.GetFieldByName("arch").(string)
 
 	result := CommandResult{
-		Format:   format.Format(DefaultFormat),
+		// Format:   format.Format(DefaultFormat),
 		OutputAs: toOutputType(options.OutputAs),
 		Data:     versionInfo,
 	}
 
+	if options.ClientOnly {
+		result.Format = format.Format(ClientFormat)
+	} else {
+		result.Format = format.Format(DefaultFormat)
+	}
+
 	GenerateOutput(&result)
 	return nil
 }
