diff --git a/robotgo.go b/robotgo.go
index fa21d79..1efc199 100644
--- a/robotgo.go
+++ b/robotgo.go
@@ -528,6 +528,7 @@ func Scroll(x, y int, args ...int) {
 //
 // See keys:
 //	https://github.com/go-vgo/robotgo/blob/master/docs/keys.md
+//
 func KeyTap(tapKey string, args ...interface{}) string {
 	var (
 		akey     string
@@ -580,6 +581,18 @@ func KeyTap(tapKey string, args ...interface{}) string {
 		return C.GoString(str)
 	}
 
+	if len(args) > 2 {
+		num = len(args)
+		for i := 0; i < num; i++ {
+			s := args[i].(string)
+			ckeyArr = append(ckeyArr, (*C.char)(unsafe.Pointer(C.CString(s))))
+		}
+
+		str := C.key_Taps(zkey, (**C.char)(unsafe.Pointer(&ckeyArr[0])),
+			C.int(num), 0)
+		return C.GoString(str)
+	}
+
 	amod := C.CString(akey)
 	amodt := C.CString(keyT)
 
@@ -595,25 +608,40 @@ func KeyTap(tapKey string, args ...interface{}) string {
 //
 // See keys:
 //	https://github.com/go-vgo/robotgo/blob/master/docs/keys.md
-func KeyToggle(args ...string) string {
+//
+func KeyToggle(key string, args ...string) string {
+	ckey := C.CString(key)
+	defer C.free(unsafe.Pointer(ckey))
+
+	ckeyArr := make([](*C.char), 0)
+	if len(args) > 3 {
+		num := len(args)
+
+		for i := 0; i < num; i++ {
+			ckeyArr = append(ckeyArr, (*C.char)(unsafe.Pointer(C.CString(args[i]))))
+		}
+
+		str := C.key_Toggles(ckey, (**C.char)(unsafe.Pointer(&ckeyArr[0])), C.int(num))
+		return C.GoString(str)
+	}
+
 	var (
 		down, mKey, mKeyT = "null", "null", "null"
 		// keyDelay = 10
 	)
 
-	if len(args) > 1 {
-		down = args[1]
+	if len(args) > 0 {
+		down = args[0]
 
-		if len(args) > 2 {
-			mKey = args[2]
+		if len(args) > 1 {
+			mKey = args[1]
 
-			if len(args) > 3 {
-				mKeyT = args[3]
+			if len(args) > 2 {
+				mKeyT = args[2]
 			}
 		}
 	}
 
-	ckey := C.CString(args[0])
 	cdown := C.CString(down)
 	cmKey := C.CString(mKey)
 	cmKeyT := C.CString(mKeyT)
@@ -621,7 +649,6 @@ func KeyToggle(args ...string) string {
 	str := C.key_toggle(ckey, cdown, cmKey, cmKeyT)
 	// str := C.key_Toggle(ckey, cdown, cmKey, cmKeyT, C.int(keyDelay))
 
-	C.free(unsafe.Pointer(ckey))
 	C.free(unsafe.Pointer(cdown))
 	C.free(unsafe.Pointer(cmKey))
 	C.free(unsafe.Pointer(cmKeyT))