diff --git a/cmd-unbind-key.c b/cmd-unbind-key.c
index db1390a..4ac3fd9 100644
--- a/cmd-unbind-key.c
+++ b/cmd-unbind-key.c
@@ -42,8 +42,8 @@ const struct cmd_entry cmd_unbind_key_entry = {
 int
 cmd_unbind_key_check(struct args *args)
 {
-	if (args_has(args, 'a') && (args->argc != 0 || args_has(args, 't')))
-	    return (-1);
+	if (args_has(args, 'a') && args->argc != 0)
+		return (-1);
 	if (!args_has(args, 'a') && args->argc != 1)
 		return (-1);
 	return (0);
@@ -52,52 +52,53 @@ cmd_unbind_key_check(struct args *args)
 int
 cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
 {
-	struct args		*args = self->args;
-	struct key_binding	*bd;
-	int			 key;
+	struct args			*args = self->args;
+	struct key_binding		*bd;
+	const struct mode_key_table	*mtab;
+	struct mode_key_binding		*mbind, mtmp;
+	const char			*tablename;
+	int				 key;
 
-	if (args_has(args, 'a')) {
-		while (!RB_EMPTY(&key_bindings)) {
-			bd = RB_ROOT(&key_bindings);
-			key_bindings_remove(bd->key);
+	if((tablename = args_get(args, 't')) != NULL){
+		if ((mtab = mode_key_findtable(tablename)) == NULL) {
+			ctx->error(ctx, "unknown key table: %s", tablename);
+			return (-1);
 		}
-		return (0);
-	}
 
-	key = key_string_lookup_string(args->argv[0]);
-	if (key == KEYC_NONE) {
-		ctx->error(ctx, "unknown key: %s", args->argv[0]);
-		return (-1);
-	}
-
-	if (args_has(args, 't'))
-		return (cmd_unbind_key_table(self, ctx, key));
+		if (args_has(args, 'a')) {
+			while (!RB_EMPTY(mtab->tree)) {
+				mbind = RB_ROOT(mtab->tree);
+				RB_REMOVE(mode_key_tree, mtab->tree, mbind);
+                                xfree(mbind);
+			}
+			return (0);
+		}
 
-	if (!args_has(args, 'n'))
-		key |= KEYC_PREFIX;
-	key_bindings_remove(key);
-	return (0);
-}
+		mtmp.key = key;
+		mtmp.mode = !!args_has(args, 'c');
+		if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
+			RB_REMOVE(mode_key_tree, mtab->tree, mbind);
+			xfree(mbind);
+		}
+	} else {
+		if (args_has(args, 'a')) {
+			while (!RB_EMPTY(&key_bindings)) {
+				bd = RB_ROOT(&key_bindings);
+				key_bindings_remove(bd->key);
+			}
+			return (0);
+		}
 
-int
-cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
-{
-	struct args			*args = self->args;
-	const char			*tablename;
-	const struct mode_key_table	*mtab;
-	struct mode_key_binding		*mbind, mtmp;
+		key = key_string_lookup_string(args->argv[0]);
+		if (key == KEYC_NONE) {
+			ctx->error(ctx, "unknown key: %s", args->argv[0]);
+			return (-1);
+		}
 
-	tablename = args_get(args, 't');
-	if ((mtab = mode_key_findtable(tablename)) == NULL) {
-		ctx->error(ctx, "unknown key table: %s", tablename);
-		return (-1);
+		if (!args_has(args, 'n'))
+			key |= KEYC_PREFIX;
+		key_bindings_remove(key);
 	}
 
-	mtmp.key = key;
-	mtmp.mode = !!args_has(args, 'c');
-	if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
-		RB_REMOVE(mode_key_tree, mtab->tree, mbind);
-		xfree(mbind);
-	}
 	return (0);
 }
