diff --git a/VERSION b/VERSION
index 3a3cd8c..c3f0d2b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.1
+1.4.0-dev
diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index d41b9ac..416e1c5 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -45,6 +45,7 @@
 	DEFAULT_DEVICE_PM_CONFIG_METRIC_LIST_FORMAT = "table{{.Name}}\t{{.Type}}\t{{.Enabled}}\t{{.SampleFreq}}"
 	DEFAULT_DEVICE_PM_CONFIG_GROUP_LIST_FORMAT  = "table{{.GroupName}}\t{{.Enabled}}\t{{.GroupFreq}}"
 	DEFAULT_DEVICE_VALUE_GET_FORMAT             = "table{{.Name}}\t{{.Result}}"
+	DEFAULT_DEVICE_IMAGE_LIST_GET_FORMAT        = "table{{.Name}}\t{{.Url}}\t{{.Crc}}\t{{.DownloadState}}\t{{.ImageVersion}}\t{{.LocalDir}}\t{{.ImageState}}\t{{.FileSize}}"
 )
 
 type DeviceList struct {
@@ -206,6 +207,34 @@
 	} `positional-args:"yes"`
 }
 
+type DeviceOnuListImages struct {
+	ListOutputOptions
+	Args struct {
+		Id DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+	} `positional-args:"yes"`
+}
+
+type DeviceOnuDownloadImage struct {
+	Args struct {
+		Id           DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Name         string   `positional-arg-name:"IMAGE_NAME" required:"yes"`
+		Url          string   `positional-arg-name:"IMAGE_URL" required:"yes"`
+		ImageVersion string   `positional-arg-name:"IMAGE_VERSION" required:"yes"`
+		Crc          uint32   `positional-arg-name:"IMAGE_CRC" required:"yes"`
+		LocalDir     string   `positional-arg-name:"IMAGE_LOCAL_DIRECTORY"`
+	} `positional-args:"yes"`
+}
+
+type DeviceOnuActivateImageUpdate struct {
+	Args struct {
+		Id           DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Name         string   `positional-arg-name:"IMAGE_NAME" required:"yes"`
+		ImageVersion string   `positional-arg-name:"IMAGE_VERSION" required:"yes"`
+		SaveConfig   bool     `positional-arg-name:"SAVE_EXISTING_CONFIG"`
+		LocalDir     string   `positional-arg-name:"IMAGE_LOCAL_DIRECTORY"`
+	} `positional-args:"yes"`
+}
+
 type DeviceOpts struct {
 	List    DeviceList     `command:"list"`
 	Create  DeviceCreate   `command:"create"`
@@ -245,6 +274,12 @@
 			List DevicePmConfigGroupMetricList `command:"list"`
 		} `command:"groupmetric"`
 	} `command:"pmconfig"`
+
+	Image struct {
+		Get      DeviceOnuListImages          `command:"list"`
+		Download DeviceOnuDownloadImage       `command:"download"`
+		Activate DeviceOnuActivateImageUpdate `command:"activate"`
+	} `command:"image"`
 }
 
 var deviceOpts = DeviceOpts{}
@@ -1268,6 +1303,114 @@
 
 }
 
+func (options *DeviceOnuListImages) Execute(args []string) error {
+
+	conn, err := NewConnection()
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+
+	client := voltha.NewVolthaServiceClient(conn)
+
+	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	id := common.ID{Id: string(options.Args.Id)}
+
+	imageDownloads, err := client.ListImageDownloads(ctx, &id)
+	if err != nil {
+		return err
+	}
+
+	outputFormat := CharReplacer.Replace(options.Format)
+	if outputFormat == "" {
+		outputFormat = GetCommandOptionWithDefault("device-image-list", "format", DEFAULT_DEVICE_IMAGE_LIST_GET_FORMAT)
+	}
+
+	if options.Quiet {
+		outputFormat = "{{.Id}}"
+	}
+
+	//TODO orderby
+
+	// Make sure json output prints an empty list, not "null"
+	if imageDownloads.Items == nil {
+		imageDownloads.Items = make([]*voltha.ImageDownload, 0)
+	}
+
+	result := CommandResult{
+		Format:    format.Format(outputFormat),
+		OutputAs:  toOutputType(options.OutputAs),
+		NameLimit: options.NameLimit,
+		Data:      imageDownloads.Items,
+	}
+
+	GenerateOutput(&result)
+	return nil
+
+}
+
+func (options *DeviceOnuDownloadImage) Execute(args []string) error {
+
+	conn, err := NewConnection()
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+
+	client := voltha.NewVolthaServiceClient(conn)
+
+	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	downloadImage := voltha.ImageDownload{
+		Id:       string(options.Args.Id),
+		Name:     options.Args.Name,
+		Url:      options.Args.Url,
+		Crc:      options.Args.Crc,
+		LocalDir: options.Args.LocalDir,
+	}
+
+	_, err = client.DownloadImage(ctx, &downloadImage)
+	if err != nil {
+		return err
+	}
+
+	return nil
+
+}
+
+func (options *DeviceOnuActivateImageUpdate) Execute(args []string) error {
+
+	conn, err := NewConnection()
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+
+	client := voltha.NewVolthaServiceClient(conn)
+
+	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	downloadImage := voltha.ImageDownload{
+		Id:           string(options.Args.Id),
+		Name:         options.Args.Name,
+		ImageVersion: options.Args.ImageVersion,
+		SaveConfig:   options.Args.SaveConfig,
+		LocalDir:     options.Args.LocalDir,
+	}
+
+	_, err = client.ActivateImageUpdate(ctx, &downloadImage)
+	if err != nil {
+		return err
+	}
+
+	return nil
+
+}
+
 type ReturnValueRow struct {
 	Name   string      `json:"name"`
 	Result interface{} `json:"result"`
