diff --git a/VERSION b/VERSION
index 8fc77d0..f8f3c08 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.17
+1.0.18
diff --git a/cmd/voltctl/voltctl.go b/cmd/voltctl/voltctl.go
index 02de992..cdee1fb 100644
--- a/cmd/voltctl/voltctl.go
+++ b/cmd/voltctl/voltctl.go
@@ -17,10 +17,11 @@
 
 import (
 	"fmt"
-	flags "github.com/jessevdk/go-flags"
-	"github.com/opencord/voltctl/internal/pkg/commands"
 	"os"
 	"path"
+
+	flags "github.com/jessevdk/go-flags"
+	"github.com/opencord/voltctl/internal/pkg/commands"
 )
 
 func main() {
@@ -77,10 +78,13 @@
 			if real.Type == flags.ErrHelp {
 				parser.WriteHelp(os.Stdout)
 			} else {
-				fmt.Fprintf(os.Stderr, "%s\n", real.Error())
+				if real.Error() != commands.NoReportErr.Error() {
+					fmt.Fprintf(os.Stderr, "%s\n", real.Error())
+				}
+				os.Exit(1)
 			}
 			return
-		} else {
+		} else if err != commands.NoReportErr {
 			commands.Error.Fatal(commands.ErrorToString(err))
 		}
 		os.Exit(1)
diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index e6a2a3f..24e3554 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -18,14 +18,15 @@
 import (
 	"context"
 	"fmt"
+	"os"
+	"strconv"
+	"strings"
+
 	"github.com/fullstorydev/grpcurl"
 	flags "github.com/jessevdk/go-flags"
 	"github.com/jhump/protoreflect/dynamic"
 	"github.com/opencord/voltctl/pkg/format"
 	"github.com/opencord/voltctl/pkg/model"
-	"os"
-	"strconv"
-	"strings"
 )
 
 const (
@@ -393,6 +394,7 @@
 		return err
 	}
 
+	var lastErr error
 	for _, i := range options.Args.Ids {
 
 		h := &RpcEventHandler{
@@ -404,14 +406,19 @@
 		err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, []string{}, h, h.GetParams)
 		if err != nil {
 			Error.Printf("Error while deleting '%s': %s\n", i, err)
+			lastErr = err
 			continue
 		} else if h.Status != nil && h.Status.Err() != nil {
 			Error.Printf("Error while deleting '%s': %s\n", i, ErrorToString(h.Status.Err()))
+			lastErr = h.Status.Err()
 			continue
 		}
 		fmt.Printf("%s\n", i)
 	}
 
+	if lastErr != nil {
+		return NoReportErr
+	}
 	return nil
 }
 
@@ -427,6 +434,7 @@
 		return err
 	}
 
+	var lastErr error
 	for _, i := range options.Args.Ids {
 		h := &RpcEventHandler{
 			Fields: map[string]map[string]interface{}{ParamNames[GlobalConfig.ApiVersion]["ID"]: {"id": i}},
@@ -437,14 +445,19 @@
 		err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, []string{}, h, h.GetParams)
 		if err != nil {
 			Error.Printf("Error while enabling '%s': %s\n", i, err)
+			lastErr = err
 			continue
 		} else if h.Status != nil && h.Status.Err() != nil {
 			Error.Printf("Error while enabling '%s': %s\n", i, ErrorToString(h.Status.Err()))
+			lastErr = h.Status.Err()
 			continue
 		}
 		fmt.Printf("%s\n", i)
 	}
 
+	if lastErr != nil {
+		return NoReportErr
+	}
 	return nil
 }
 
@@ -460,6 +473,7 @@
 		return err
 	}
 
+	var lastErr error
 	for _, i := range options.Args.Ids {
 		h := &RpcEventHandler{
 			Fields: map[string]map[string]interface{}{ParamNames[GlobalConfig.ApiVersion]["ID"]: {"id": i}},
@@ -470,14 +484,19 @@
 		err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, []string{}, h, h.GetParams)
 		if err != nil {
 			Error.Printf("Error while disabling '%s': %s\n", i, err)
+			lastErr = err
 			continue
 		} else if h.Status != nil && h.Status.Err() != nil {
 			Error.Printf("Error while disabling '%s': %s\n", i, ErrorToString(h.Status.Err()))
+			lastErr = h.Status.Err()
 			continue
 		}
 		fmt.Printf("%s\n", i)
 	}
 
+	if lastErr != nil {
+		return NoReportErr
+	}
 	return nil
 }
 
@@ -493,6 +512,7 @@
 		return err
 	}
 
+	var lastErr error
 	for _, i := range options.Args.Ids {
 		h := &RpcEventHandler{
 			Fields: map[string]map[string]interface{}{ParamNames[GlobalConfig.ApiVersion]["ID"]: {"id": i}},
@@ -503,14 +523,19 @@
 		err = grpcurl.InvokeRPC(ctx, descriptor, conn, method, []string{}, h, h.GetParams)
 		if err != nil {
 			Error.Printf("Error while rebooting '%s': %s\n", i, err)
+			lastErr = err
 			continue
 		} else if h.Status != nil && h.Status.Err() != nil {
 			Error.Printf("Error while rebooting '%s': %s\n", i, ErrorToString(h.Status.Err()))
+			lastErr = h.Status.Err()
 			continue
 		}
 		fmt.Printf("%s\n", i)
 	}
 
+	if lastErr != nil {
+		return NoReportErr
+	}
 	return nil
 }
 
diff --git a/internal/pkg/commands/error.go b/internal/pkg/commands/error.go
index ff641d3..d198a5c 100644
--- a/internal/pkg/commands/error.go
+++ b/internal/pkg/commands/error.go
@@ -18,16 +18,19 @@
 package commands
 
 import (
+	"errors"
 	"fmt"
-	"google.golang.org/grpc/status"
 	"regexp"
 	"strings"
+
+	"google.golang.org/grpc/status"
 )
 
 var (
-	descRE = regexp.MustCompile(`desc = "(.*)"`)
-	try2RE = regexp.MustCompile(`all SubConns are in TransientFailure, latest connection error: (.*)`)
-	try3RE = regexp.MustCompile(`all SubConns are in TransientFailure, (.*)`)
+	descRE      = regexp.MustCompile(`desc = "(.*)"`)
+	try2RE      = regexp.MustCompile(`all SubConns are in TransientFailure, latest connection error: (.*)`)
+	try3RE      = regexp.MustCompile(`all SubConns are in TransientFailure, (.*)`)
+	NoReportErr = errors.New("no-report-please")
 )
 
 func ErrorToString(err error) string {
