diff --git a/commands/command.go b/commands/command.go
index 4a38d5b..bdd7dfb 100644
--- a/commands/command.go
+++ b/commands/command.go
@@ -20,6 +20,7 @@
 	"encoding/json"
 	"fmt"
 	"github.com/opencord/cordctl/format"
+	"github.com/opencord/cordctl/order"
 	"google.golang.org/grpc"
 	"gopkg.in/yaml.v2"
 	"io"
@@ -95,6 +96,11 @@
 	OutputAs string `short:"o" long:"outputas" default:"table" choice:"table" choice:"json" choice:"yaml" description:"Type of output to generate"`
 }
 
+type ListOutputOptions struct {
+	OutputOptions
+	OrderBy string `short:"r" long:"orderby" default:"" description:"Specify the sort order of the results"`
+}
+
 func toOutputType(in string) OutputType {
 	switch in {
 	case "table":
@@ -110,6 +116,7 @@
 
 type CommandResult struct {
 	Format   format.Format
+	OrderBy  string
 	OutputAs OutputType
 	Data     interface{}
 }
@@ -191,17 +198,28 @@
 
 func GenerateOutput(result *CommandResult) {
 	if result != nil && result.Data != nil {
+		data := result.Data
+		if result.OrderBy != "" {
+			s, err := order.Parse(result.OrderBy)
+			if err != nil {
+				panic(err)
+			}
+			data, err = s.Process(data)
+			if err != nil {
+				panic(err)
+			}
+		}
 		if result.OutputAs == OUTPUT_TABLE {
 			tableFormat := format.Format(result.Format)
-			tableFormat.Execute(OutputStream, true, result.Data)
+			tableFormat.Execute(OutputStream, true, data)
 		} else if result.OutputAs == OUTPUT_JSON {
-			asJson, err := json.Marshal(&result.Data)
+			asJson, err := json.Marshal(&data)
 			if err != nil {
 				panic(err)
 			}
 			fmt.Fprintf(OutputStream, "%s", asJson)
 		} else if result.OutputAs == OUTPUT_YAML {
-			asYaml, err := yaml.Marshal(&result.Data)
+			asYaml, err := yaml.Marshal(&data)
 			if err != nil {
 				panic(err)
 			}
@@ -228,3 +246,23 @@
 
 	GenerateOutput(&result)
 }
+
+// Applies common output options to format and generate output
+func FormatAndGenerateListOutput(options *ListOutputOptions, default_format string, quiet_format string, data interface{}) {
+	outputFormat := CharReplacer.Replace(options.Format)
+	if outputFormat == "" {
+		outputFormat = default_format
+	}
+	if options.Quiet {
+		outputFormat = quiet_format
+	}
+
+	result := CommandResult{
+		Format:   format.Format(outputFormat),
+		OutputAs: toOutputType(options.OutputAs),
+		Data:     data,
+		OrderBy:  options.OrderBy,
+	}
+
+	GenerateOutput(&result)
+}
diff --git a/commands/models.go b/commands/models.go
index fd820b2..bd6552f 100644
--- a/commands/models.go
+++ b/commands/models.go
@@ -35,7 +35,7 @@
 type ModelNameString string
 
 type ModelList struct {
-	OutputOptions
+	ListOutputOptions
 	ShowHidden      bool   `long:"showhidden" description:"Show hidden fields in default output"`
 	ShowFeedback    bool   `long:"showfeedback" description:"Show feedback fields in default output"`
 	ShowBookkeeping bool   `long:"showbookkeeping" description:"Show bookkeeping fields in default output"`
@@ -220,7 +220,7 @@
 		}
 	}
 
-	FormatAndGenerateOutput(&options.OutputOptions, default_format.String(), "{{.id}}", data)
+	FormatAndGenerateListOutput(&options.ListOutputOptions, default_format.String(), "{{.id}}", data)
 
 	return nil
 }
diff --git a/commands/services.go b/commands/services.go
index e46dac6..e4a11cf 100644
--- a/commands/services.go
+++ b/commands/services.go
@@ -28,7 +28,7 @@
 )
 
 type ServiceList struct {
-	OutputOptions
+	ListOutputOptions
 }
 
 type ServiceListOutput struct {
@@ -88,7 +88,7 @@
 		data[i].State = val.GetFieldByName("state").(string)
 	}
 
-	FormatAndGenerateOutput(&options.OutputOptions, DEFAULT_SERVICE_FORMAT, "{{.Name}}", data)
+	FormatAndGenerateListOutput(&options.ListOutputOptions, DEFAULT_SERVICE_FORMAT, "{{.Name}}", data)
 
 	return nil
 }
