diff --git a/modules/apps/29-fee/client/cli/cli.go b/modules/apps/29-fee/client/cli/cli.go
index 9e18b088dc4..abb1d40c31b 100644
--- a/modules/apps/29-fee/client/cli/cli.go
+++ b/modules/apps/29-fee/client/cli/cli.go
@@ -33,6 +33,7 @@ func NewTxCmd() *cobra.Command {
 
 	txCmd.AddCommand(
 		NewPayPacketFeeAsyncTxCmd(),
+		NewRegisterCounterpartyAddress(),
 	)
 
 	return txCmd
diff --git a/modules/apps/29-fee/client/cli/tx.go b/modules/apps/29-fee/client/cli/tx.go
index d14c8313dca..0a4436b0bc4 100644
--- a/modules/apps/29-fee/client/cli/tx.go
+++ b/modules/apps/29-fee/client/cli/tx.go
@@ -28,7 +28,7 @@ func NewPayPacketFeeAsyncTxCmd() *cobra.Command {
 		Use:     "pay-packet-fee [src-port] [src-channel] [sequence]",
 		Short:   "Pay a fee to incentivize an existing IBC packet",
 		Long:    strings.TrimSpace(`Pay a fee to incentivize an existing IBC packet.`),
-		Example: fmt.Sprintf("%s tx pay-packet-fee transfer channel-0 1 --recv-fee 10stake --ack-fee 10stake --timeout-fee 10stake", version.AppName),
+		Example: fmt.Sprintf("%s tx ibc-fee pay-packet-fee transfer channel-0 1 --recv-fee 10stake --ack-fee 10stake --timeout-fee 10stake", version.AppName),
 		Args:    cobra.ExactArgs(3),
 		RunE: func(cmd *cobra.Command, args []string) error {
 			clientCtx, err := client.GetClientTxContext(cmd)
@@ -97,3 +97,28 @@ func NewPayPacketFeeAsyncTxCmd() *cobra.Command {
 
 	return cmd
 }
+
+// NewRegisterCounterpartyAddress returns the command to create a MsgRegisterCounterpartyAddress
+func NewRegisterCounterpartyAddress() *cobra.Command {
+	cmd := &cobra.Command{
+		Use:     "register-counterparty [address] [counterparty-address] [channel-id]",
+		Short:   "Register a counterparty relayer address on a given channel.",
+		Long:    strings.TrimSpace(`Register a counterparty relayer address on a given channel.`),
+		Example: fmt.Sprintf("%s tx ibc-fee register-counterparty cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh osmo1v5y0tz01llxzf4c2afml8s3awue0ymju22wxx2 channel-0", version.AppName),
+		Args:    cobra.ExactArgs(3),
+		RunE: func(cmd *cobra.Command, args []string) error {
+			clientCtx, err := client.GetClientTxContext(cmd)
+			if err != nil {
+				return err
+			}
+
+			msg := types.NewMsgRegisterCounterpartyAddress(args[0], args[1], args[2])
+
+			return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+		},
+	}
+
+	flags.AddTxFlagsToCmd(cmd)
+
+	return cmd
+}