diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index d3740b6ddf3b968d23fbd161f853fc951d23ef15..8b5f3289752a441f50cc9cccec54f28c56ecf963 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -3980,14 +3980,18 @@ static int iax2_show_users(int fd, int argc, char *argv[])
 	char auth[90] = "";
 	char *pstr = "";
 
-	if (argc < 3 || argc > 4)
-		return RESULT_SHOWUSAGE;
-	
-	if (argc == 4) {
-		if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
+	switch (argc) {
+	case 5:
+		if (!strcasecmp(argv[3], "like")) {
+			if (regcomp(&regexbuf, argv[4], REG_EXTENDED | REG_NOSUB))
+				return RESULT_SHOWUSAGE;
+			havepattern = 1;
+		} else
 			return RESULT_SHOWUSAGE;
-
-		havepattern = 1;
+	case 3:
+		break;
+	default:
+		return RESULT_SHOWUSAGE;
 	}
 
 	ast_mutex_lock(&userl.lock);
@@ -4042,36 +4046,38 @@ static int iax2_show_peers(int fd, int argc, char *argv[])
 	char iabuf[INET_ADDRSTRLEN];
 	int registeredonly=0;
 
-	if (argc > 5)
-		return RESULT_SHOWUSAGE;
-
-	if (argc > 3) {
- 		if (!strcasecmp(argv[3], "registered")) {
+	switch (argc) {
+	case 6:
+ 		if (!strcasecmp(argv[3], "registered"))
 			registeredonly = 1;
-		} else {
-			if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
+		else
+			return RESULT_SHOWUSAGE;
+		if (!strcasecmp(argv[4], "like")) {
+			if (regcomp(&regexbuf, argv[5], REG_EXTENDED | REG_NOSUB))
 				return RESULT_SHOWUSAGE;
-
 			havepattern = 1;
-		}
- 	}
-
-	if (argc > 4) {
- 		if (!strcasecmp(argv[4], "registered")) {
-			if (registeredonly)
-				return RESULT_SHOWUSAGE;
-
-			registeredonly = 1;
-		} else {
-			if (havepattern)
-				return RESULT_SHOWUSAGE;
-
+		} else
+			return RESULT_SHOWUSAGE;
+		break;
+	case 5:
+		if (!strcasecmp(argv[3], "like")) {
 			if (regcomp(&regexbuf, argv[4], REG_EXTENDED | REG_NOSUB))
 				return RESULT_SHOWUSAGE;
-
 			havepattern = 1;
-		}
- 	}
+		} else
+			return RESULT_SHOWUSAGE;
+		break;
+	case 4:
+ 		if (!strcasecmp(argv[3], "registered"))
+			registeredonly = 1;
+		else
+			return RESULT_SHOWUSAGE;
+		break;
+	case 3:
+		break;
+	default:
+		return RESULT_SHOWUSAGE;
+	}
 
 	ast_mutex_lock(&peerl.lock);
 	ast_cli(fd, FORMAT2, "Name/Username", "Host", "   ", "Mask", "Port", "   ", "Status");
@@ -4416,7 +4422,7 @@ static int iax2_no_debug(int fd, int argc, char *argv[])
 
 
 static char show_users_usage[] = 
-"Usage: iax2 show users [pattern]\n"
+"Usage: iax2 show users [like <pattern>]\n"
 "       Lists all known IAX2 users.\n"
 "       Optional regular expression pattern is used to filter the user list.\n";
 
@@ -4429,9 +4435,9 @@ static char show_netstats_usage[] =
 "       Lists network status for all currently active IAX channels.\n";
 
 static char show_peers_usage[] = 
-"Usage: iax2 show peers [registered] [pattern]\n"
+"Usage: iax2 show peers [registered] [like <pattern>]\n"
 "       Lists all known IAX2 peers.\n"
-"	Optional 'registered' argument lists only peers with known addresses.\n"
+"       Optional 'registered' argument lists only peers with known addresses.\n"
 "       Optional regular expression pattern is used to filter the peer list.\n";
 
 static char show_firmware_usage[] = 
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 80f072dd301b8b7210cfe198e91691ed25de4681..e64ccba7fe4915cc2db65ece677446c2d6cebeec 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -6205,14 +6205,18 @@ static int sip_show_users(int fd, int argc, char *argv[])
 
 #define FORMAT  "%-25.25s  %-15.15s  %-15.15s  %-15.15s  %-5.5s%-10.10s\n"
 
-	if (argc > 4)
-		return RESULT_SHOWUSAGE;
-	
-	if (argc == 4) {
-		if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
+	switch (argc) {
+	case 5:
+		if (!strcasecmp(argv[3], "like")) {
+			if (regcomp(&regexbuf, argv[4], REG_EXTENDED | REG_NOSUB))
+				return RESULT_SHOWUSAGE;
+			havepattern = 1;
+		} else
 			return RESULT_SHOWUSAGE;
-
-		havepattern = 1;
+	case 3:
+		break;
+	default:
+		return RESULT_SHOWUSAGE;
 	}
 
 	ast_cli(fd, FORMAT, "Username", "Secret", "Accountcode", "Def.Context", "ACL", "NAT");
@@ -6303,14 +6307,18 @@ static int _sip_show_peers(int fd, int *total, struct mansession *s, struct mess
                		snprintf(idtext,256,"ActionID: %s\r\n",id);
 	}
 
-	if (argc > 4)
-		return RESULT_SHOWUSAGE;
-	
-	if (argc == 4) {
-		if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
+	switch (argc) {
+	case 5:
+		if (!strcasecmp(argv[3], "like")) {
+			if (regcomp(&regexbuf, argv[4], REG_EXTENDED | REG_NOSUB))
+				return RESULT_SHOWUSAGE;
+			havepattern = 1;
+		} else
 			return RESULT_SHOWUSAGE;
-
-		havepattern = 1;
+	case 3:
+		break;
+	default:
+		return RESULT_SHOWUSAGE;
 	}
 
 	if (!s) { /* Normal list */
@@ -7707,7 +7715,7 @@ static char notify_usage[] =
 "       Message types are defined in sip_notify.conf\n";
 
 static char show_users_usage[] = 
-"Usage: sip show users [pattern]\n"
+"Usage: sip show users [like <pattern>]\n"
 "       Lists all known SIP users.\n"
 "       Optional regular expression pattern is used to filter the user list.\n";
 
@@ -7734,7 +7742,7 @@ static char show_history_usage[] =
 "       Provides detailed dialog history on a given SIP channel.\n";
 
 static char show_peers_usage[] = 
-"Usage: sip show peers [pattern]\n"
+"Usage: sip show peers [like <pattern>]\n"
 "       Lists all known SIP peers.\n"
 "       Optional regular expression pattern is used to filter the peer list.\n";