diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 433898aa34d..3eebf5ff9ad 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -254,7 +254,7 @@ static const char *opt_suite_dir, *opt_overlay_dir;
 static size_t suite_dir_len, overlay_dir_len;
 
 /* Precompiled re's */
-static regex_t ps_re;     /* the query can be run using PS protocol */
+static regex_t nps_re;    /* the query can't be run using PS protocol */
 static regex_t sp_re;     /* the query can be run as a SP */
 static regex_t view_re;   /* the query can be run as a view*/
 
@@ -8690,7 +8690,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
   */
   if (ps_protocol_enabled &&
       complete_query &&
-      match_re(&ps_re, query))
+      !match_re(&nps_re, query))
     run_query_stmt(cn, command, query, query_len, ds, &ds_warnings);
   else
     run_query_normal(cn, command, flags, query, query_len,
@@ -8767,7 +8767,47 @@ void init_re(void)
     Filter for queries that can be run using the
     MySQL Prepared Statements C API
   */
-  const char *ps_re_str =
+  const char *nps_re_str=
+    "^("
+    "[[:space:]]*SHOW[[:space:]]|" // bug with SHOW GRANTS
+    "[[:space:]]*CALL[[:space:]]|" // bug with CALL PROCEDURE
+    //"[[:space:]]*ALTER[[:space:]]+FUNCTION[[:space:]]|"
+    "[[:space:]]*DROP[[:space:]]+FUNCTION[[:space:]]|"
+    "[[:space:]]*CREATE[[:space:]]+.*FUNCTION[[:space:]]|"
+    //"[[:space:]]*ALTER[[:space:]]+PROCEDURE[[:space:]]|"
+    "[[:space:]]*DROP[[:space:]]+PROCEDURE[[:space:]]|"
+    "[[:space:]]*CREATE[[:space:]]+.*PROCEDURE[[:space:]]|"
+    //"[[:space:]]*ALTER[[:space:]]+TRIGGER[[:space:]]|"
+    "[[:space:]]*DROP[[:space:]]+TRIGGER[[:space:]]|"
+    "[[:space:]]*CREATE[[:space:]]+.*TRIGGER[[:space:]]|"
+    "[[:space:]]*ALTER[[:space:]]+.*EVENT[[:space:]]|"
+    "[[:space:]]*DROP[[:space:]]+EVENT[[:space:]]|"
+    "[[:space:]]*CREATE[[:space:]]+.*EVENT[[:space:]]|"
+    "[[:space:]]*ALTER[[:space:]]+DATABASE[[:space:]]|"
+    "[[:space:]]*REVOKE[[:space:]]|"
+    "[[:space:]]*PREPARE[[:space:]]|"
+    "[[:space:]]*EXECUTE[[:space:]]|"
+    "[[:space:]]*DEALLOCATE[[:space:]]|"
+    "[[:space:]]*USE[[:space:]]|"
+    "[[:space:]]*CHECK[[:space:]]|"
+    "[[:space:]]*START[[:space:]]+TRANSACTION|"
+    "[[:space:]]*LOAD[[:space:]]|"
+    "[[:space:]]*LOCK[[:space:]]|"
+    "[[:space:]]*UNLOCK[[:space:]]|"
+    "[[:space:]]*RELEASE[[:space:]]|"
+    "[[:space:]]*SET[[:space:]]+STATEMENT[[:space:]]|" // then goes any command
+    "[[:space:]]*HANDLER[[:space:]]|"
+    "[[:space:]]*SAVEPOINT[[:space:]]|"
+    "[[:space:]]*BEGIN|"
+    "[[:space:]]*COMMIT|"
+    "[[:space:]]*ROLLBACK"
+    ")";
+
+  /*
+    Filter for queries that can be run using the
+    Stored procedures
+  */
+  const char *sp_re_str=
     "^("
     "[[:space:]]*REPLACE[[:space:]]|"
     "[[:space:]]*INSERT[[:space:]]|"
@@ -8781,12 +8821,6 @@ void init_re(void)
     "[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|"
     "[[:space:]]*INSERT[[:space:]]+SELECT[[:space:]])";
 
-  /*
-    Filter for queries that can be run using the
-    Stored procedures
-  */
-  const char *sp_re_str =ps_re_str;
-
   /*
     Filter for queries that can be run as views
   */
@@ -8794,7 +8828,7 @@ void init_re(void)
     "^("
     "[[:space:]]*SELECT[[:space:]])";
 
-  init_re_comp(&ps_re, ps_re_str);
+  init_re_comp(&nps_re, nps_re_str);
   init_re_comp(&sp_re, sp_re_str);
   init_re_comp(&view_re, view_re_str);
 }
@@ -8830,7 +8864,7 @@ int match_re(regex_t *re, char *str)
 
 void free_re(void)
 {
-  regfree(&ps_re);
+  regfree(&nps_re);
   regfree(&sp_re);
   regfree(&view_re);
 }
