diff --git a/src/client_cli/vmEdit.go b/src/client_cli/vmEdit.go
new file mode 100644
index 0000000000000000000000000000000000000000..712199e616cb71790ff187b2773762d90cc93c15
--- /dev/null
+++ b/src/client_cli/vmEdit.go
@@ -0,0 +1,93 @@
+package main
+
+import (
+	"strconv"
+	"strings"
+)
+
+type CmdVMEdit struct{
+    name string
+}
+
+func (cmd *CmdVMEdit)Name() string {
+	return cmd.name
+}
+ 
+func (cmd *CmdVMEdit)Desc() string {
+	return "Create a VM"
+}
+
+func (cmd *CmdVMEdit)PrintUsage() {
+	printlnErr("Usage: "+cmd.name+" vmID [name=\"new name\"] [cpus=n] [ram=n] [nic=none/user]")
+	printlnErr("Parameters between [] are optional, but at least one must be defined.")
+}
+
+func getStringVal(s string, prefix string) string {
+	if strings.HasPrefix(s, prefix) {
+		parts := strings.Split(s, prefix)
+		return parts[1]
+	}
+	return ""
+}
+
+func (cmd *CmdVMEdit)Run(args []string) int {
+	argc := len(args)
+	if argc < 2 || argc > 5 {
+		cmd.PrintUsage()
+		return 1
+	}
+
+	type VMArgs struct {
+		Name string
+		Cpus int
+		Ram int
+		Nic string
+	}
+			
+	vmArgs := &VMArgs {}
+
+	id := args[0]
+	
+	for _, arg := range args {
+		s := getStringVal(arg, "name=")
+		if s != "" {
+			vmArgs.Name = s
+		}
+		s = getStringVal(arg, "cpus=")
+		if s != "" {
+			cpus, err := strconv.Atoi(s)
+			if err != nil {
+				printlnErr("Invalid number of CPU(s)")
+				return 1
+			}
+			vmArgs.Cpus = cpus
+		}
+		s = getStringVal(arg, "ram=")
+		if s != "" {
+			ram, err := strconv.Atoi(s)
+			if err != nil {
+				printlnErr("Invalid amount of RAM")
+				return 1
+			}
+			vmArgs.Ram = ram
+		}
+		s = getStringVal(arg, "nic=")
+		if s != "" {
+			vmArgs.Nic = s
+		}
+	}
+
+	resp, err := client.R().SetBody(vmArgs).Put(host+"/vms/"+id)
+	if err != nil {
+		printlnErr("Error: "+err.Error())
+		return 1
+	}
+
+	if resp.IsSuccess() {
+		println(resp)
+		return 0
+	} else {
+		printlnErr("Error: "+resp.Status()+": "+resp.String())
+		return 1
+	}
+}