diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index b080733..c9dbaf7 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -21,6 +21,7 @@
 	"os"
 	"strconv"
 	"strings"
+	"time"
 
 	"github.com/golang/protobuf/ptypes/empty"
 	flags "github.com/jessevdk/go-flags"
@@ -177,8 +178,8 @@
 type DevicePmConfigFrequencySet struct {
 	OutputOptions
 	Args struct {
-		Frequency uint32   `positional-arg-name:"FREQUENCY" required:"yes"`
-		Id        DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Id       DeviceId      `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Interval time.Duration `positional-arg-name:"INTERVAL" required:"yes"`
 	} `positional-args:"yes"`
 }
 
@@ -198,15 +199,24 @@
 
 type DevicePmConfigGroupEnable struct {
 	Args struct {
-		Id     DeviceId    `positional-arg-name:"DEVICE_ID" required:"yes"`
-		Groups []GroupName `positional-arg-name:"GROUP_NAME" required:"yes"`
+		Id    DeviceId  `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Group GroupName `positional-arg-name:"GROUP_NAME" required:"yes"`
 	} `positional-args:"yes"`
 }
 
 type DevicePmConfigGroupDisable struct {
 	Args struct {
-		Id     DeviceId    `positional-arg-name:"DEVICE_ID" required:"yes"`
-		Groups []GroupName `positional-arg-name:"GROUP_NAME" required:"yes"`
+		Id    DeviceId  `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Group GroupName `positional-arg-name:"GROUP_NAME" required:"yes"`
+	} `positional-args:"yes"`
+}
+
+type DevicePmConfigGroupFrequencySet struct {
+	OutputOptions
+	Args struct {
+		Id       DeviceId      `positional-arg-name:"DEVICE_ID" required:"yes"`
+		Group    GroupName     `positional-arg-name:"GROUP_NAME" required:"yes"`
+		Interval time.Duration `positional-arg-name:"INTERVAL" required:"yes"`
 	} `positional-args:"yes"`
 }
 
@@ -298,9 +308,10 @@
 			Disable DevicePmConfigMetricDisable `command:"disable"`
 		} `command:"metric"`
 		Group struct {
-			List    DevicePmConfigGroupList    `command:"list"`
-			Enable  DevicePmConfigGroupEnable  `command:"enable"`
-			Disable DevicePmConfigGroupDisable `command:"disable"`
+			List    DevicePmConfigGroupList         `command:"list"`
+			Enable  DevicePmConfigGroupEnable       `command:"enable"`
+			Disable DevicePmConfigGroupDisable      `command:"disable"`
+			Set     DevicePmConfigGroupFrequencySet `command:"set"`
 		} `command:"group"`
 		GroupMetric struct {
 			List DevicePmConfigGroupMetricList `command:"list"`
@@ -1114,16 +1125,14 @@
 			groups[group.GroupName] = struct{}{}
 		}
 		for _, group := range pmConfigs.Groups {
-			for _, gName := range options.Args.Groups {
-				if _, have := groups[string(gName)]; !have {
-					return fmt.Errorf("Group Name '%s' does not exist", gName)
-				}
-				if string(gName) == group.GroupName && !group.Enabled {
-					group.Enabled = true
-					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
-					if err != nil {
-						return err
-					}
+			if _, have := groups[string(options.Args.Group)]; !have {
+				return fmt.Errorf("Group Name '%s' does not exist", options.Args.Group)
+			}
+			if string(options.Args.Group) == group.GroupName && !group.Enabled {
+				group.Enabled = true
+				_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
+				if err != nil {
+					return err
 				}
 			}
 		}
@@ -1160,17 +1169,15 @@
 		}
 
 		for _, group := range pmConfigs.Groups {
-			for _, gName := range options.Args.Groups {
-				if _, have := groups[string(gName)]; !have {
-					return fmt.Errorf("Group Name '%s' does not exist", gName)
-				}
+			if _, have := groups[string(options.Args.Group)]; !have {
+				return fmt.Errorf("Group Name '%s' does not exist", options.Args.Group)
+			}
 
-				if string(gName) == group.GroupName && group.Enabled {
-					group.Enabled = false
-					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
-					if err != nil {
-						return err
-					}
+			if string(options.Args.Group) == group.GroupName && group.Enabled {
+				group.Enabled = false
+				_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
+				if err != nil {
+					return err
 				}
 			}
 		}
@@ -1180,6 +1187,54 @@
 	return nil
 }
 
+func (options *DevicePmConfigGroupFrequencySet) 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 := voltha.ID{Id: string(options.Args.Id)}
+
+	pmConfigs, err := client.ListDevicePmConfigs(ctx, &id)
+	if err != nil {
+		return err
+	}
+
+	if pmConfigs.Grouped {
+		groups := make(map[string]struct{})
+		for _, group := range pmConfigs.Groups {
+			groups[group.GroupName] = struct{}{}
+		}
+
+		for _, group := range pmConfigs.Groups {
+			if _, have := groups[string(options.Args.Group)]; !have {
+				return fmt.Errorf("group name '%s' does not exist", options.Args.Group)
+			}
+
+			if string(options.Args.Group) == group.GroupName {
+				if !group.Enabled {
+					return fmt.Errorf("group '%s' is not enabled", options.Args.Group)
+				}
+				group.GroupFreq = uint32(options.Args.Interval.Seconds())
+				_, err = client.UpdateDevicePmConfigs(ctx, pmConfigs)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	} else {
+		return fmt.Errorf("device '%s' does not have group metrics", options.Args.Id)
+	}
+	return nil
+}
+
 func (options *DevicePmConfigGroupList) Execute(args []string) error {
 
 	conn, err := NewConnection()
@@ -1311,7 +1366,7 @@
 		return err
 	}
 
-	pmConfigs.DefaultFreq = options.Args.Frequency
+	pmConfigs.DefaultFreq = uint32(options.Args.Interval.Seconds())
 
 	_, err = client.UpdateDevicePmConfigs(ctx, pmConfigs)
 	if err != nil {
