diff --git a/mysql-test/suite/galera/r/galera_as_slave_replication_bundle.result b/mysql-test/suite/galera/r/galera_as_slave_replication_bundle.result
index a86bfd20e2f..61f1cd11640 100644
--- a/mysql-test/suite/galera/r/galera_as_slave_replication_bundle.result
+++ b/mysql-test/suite/galera/r/galera_as_slave_replication_bundle.result
@@ -1,6 +1,4 @@
-START SLAVE USER='root';
-Warnings:
-Note	1759	Sending passwords in plain text without SSL/TLS is extremely insecure.
+START SLAVE;
 CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
 INSERT INTO t1 VALUES(1);
 INSERT INTO t1 VALUES(2);
diff --git a/sql/log_event.cc b/sql/log_event.cc
index e1912ad4620..cd02407c94f 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -4722,7 +4722,10 @@ Query_log_event::do_shall_skip(rpl_group_info *rgi)
   {
     if (++thd->wsrep_mysql_replicated < (int)wsrep_mysql_replication_bundle)
     {
-      WSREP_DEBUG("skipping wsrep commit %d", thd->wsrep_mysql_replicated);
+      WSREP_DEBUG("Query_log_event: Query %s Skipping wsrep begin or commit"
+                  "replicated %d binlog %s pos %llu",
+                  query, thd->wsrep_mysql_replicated,
+                  rgi->event_relay_log_name, rgi->event_relay_log_pos);
       DBUG_RETURN(Log_event::EVENT_SKIP_IGNORE);
     }
     else
@@ -7699,7 +7702,9 @@ Xid_log_event::do_shall_skip(rpl_group_info *rgi)
   {
     if (++thd->wsrep_mysql_replicated < (int)wsrep_mysql_replication_bundle)
     {
-      WSREP_DEBUG("skipping wsrep commit %d", thd->wsrep_mysql_replicated);
+      WSREP_DEBUG("Xid_log_event: Skipping wsrep commit replicated %d binlog %s pos %llu",
+                  thd->wsrep_mysql_replicated, rgi->event_relay_log_name, rgi->event_relay_log_pos);
+      thd->variables.option_bits&= ~(OPTION_GTID_BEGIN);
       DBUG_RETURN(Log_event::EVENT_SKIP_IGNORE);
     }
     else
@@ -7707,7 +7712,8 @@ Xid_log_event::do_shall_skip(rpl_group_info *rgi)
       thd->wsrep_mysql_replicated = 0;
     }
   }
-#endif
+#endif /* WITH_WSREP */
+
   DBUG_RETURN(Log_event::do_shall_skip(rgi));
 }
 #endif /* !MYSQL_CLIENT */
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index add059340c9..d83ec80ee19 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -7267,6 +7267,10 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
 
     mysql_parse(thd, rawbuf, length, parser_state);
 
+#ifdef WSREP_DEBUG_EXTRA
+    WSREP_DEBUG("wsrep executed query: %s", thd->query());
+#endif
+
     if (WSREP(thd)) {
       /* wsrep BF abort in query exec phase */
       mysql_mutex_lock(&thd->LOCK_thd_data);
diff --git a/storage/xtradb/include/trx0sys.h b/storage/xtradb/include/trx0sys.h
index 85c454c4cf9..29eefebb191 100644
--- a/storage/xtradb/include/trx0sys.h
+++ b/storage/xtradb/include/trx0sys.h
@@ -335,13 +335,15 @@ trx_sys_print_mysql_binlog_offset(void);
 /** Update WSREP XID info in sys_header of TRX_SYS_PAGE_NO = 5.
 @param[in]	xid		Transaction XID
 @param[in,out]	sys_header	sys_header
-@param[in]	mtr		minitransaction */
+@param[in]	mtr		minitransaction
+@param[in]	trx		transaction or NULL */
 UNIV_INTERN
 void
 trx_sys_update_wsrep_checkpoint(
 	const XID*	xid,
 	trx_sysf_t*	sys_header,
-	mtr_t*		mtr);
+	mtr_t*		mtr,
+	const trx_t*	trx=NULL);
 
 /** Read WSREP checkpoint XID from sys header.
 @param[out]	xid	Transaction XID
diff --git a/storage/xtradb/trx/trx0sys.cc b/storage/xtradb/trx/trx0sys.cc
index 30660df01f6..385279557be 100644
--- a/storage/xtradb/trx/trx0sys.cc
+++ b/storage/xtradb/trx/trx0sys.cc
@@ -54,6 +54,12 @@ Created 3/26/1996 Heikki Tuuri
 
 #include <mysql/service_wsrep.h>
 
+#ifdef WITH_WSREP
+#include "log.h"
+#include "wsrep_mysqld.h"
+#include "wsrep.h"
+#endif
+
 /** The file format tag structure with id and name. */
 struct file_format_t {
 	ulint		id;		/*!< id of the file format */
@@ -348,7 +354,8 @@ void
 trx_sys_update_wsrep_checkpoint(
 	const XID*	xid,
 	trx_sysf_t*	sys_header,
-	mtr_t*		mtr)
+	mtr_t*		mtr,
+	const trx_t*	trx)
 {
 #ifdef UNIV_DEBUG
 	if (!xid->is_null()
@@ -359,12 +366,48 @@ trx_sys_update_wsrep_checkpoint(
 		unsigned char xid_uuid[16];
 		long long xid_seqno = read_wsrep_xid_seqno(xid);
 		read_wsrep_xid_uuid(xid, xid_uuid);
+			char uuid_str[40] = {0, };
+			unsigned char *u = xid_uuid;
+			snprintf(uuid_str, sizeof(uuid_str), "%02x%02x%02x%02x-%02x%02x-%02x%02x-"
+				"%02x%02x-%02x%02x%02x%02x%02x%02x",
+				u[ 0], u[ 1], u[ 2], u[ 3], u[ 4], u[ 5], u[ 6], u[ 7],
+				u[ 8], u[ 9], u[10], u[11], u[12], u[13], u[14], u[15]);
 
 		if (!memcmp(xid_uuid, trx_sys_cur_xid_uuid, 8)) {
-			ut_ad(xid_seqno > trx_sys_cur_xid_seqno);
+			/* We expect that multiple async replication events
+			will be grouped together i.e. some Xid events will
+			be skipped (see log_event.cc
+			Xid_log_event::do_shall_skip(). In slave this
+			causes
+
+			  begin at Gtid_log_event::do_apply_event
+
+			Xid_log_event::do_apply_event
+
+			with same (wsrep) Xid seqno.
+			*/
+			if (wsrep_mysql_replication_bundle &&
+			    trx_sys_cur_xid_seqno == xid_seqno) {
+				WSREP_DEBUG("WRONG: wsrep checkpoint writing for"
+					" uuid %s xid_seqno %lu trx_sys_cur_xid_seqno %lu trx_state %d",
+					uuid_str, xid_seqno, trx_sys_cur_xid_seqno, trx ? trx->state : -1);
+
+				ut_ad(xid_seqno > trx_sys_cur_xid_seqno);
+				return;
+			} else {
+				ut_ad(xid_seqno > trx_sys_cur_xid_seqno);
+			}
+
+			WSREP_DEBUG("Wsrep checkpoint writing for"
+				" uuid %s xid_seqno %lu trx_sys_cur_xid_seqno %lu trx_state %d",
+				uuid_str, xid_seqno, trx_sys_cur_xid_seqno, trx ? trx->state : -1);
 			trx_sys_cur_xid_seqno = xid_seqno;
 		} else {
+		long long xid_seqno = read_wsrep_xid_seqno(xid);
 			memcpy(trx_sys_cur_xid_uuid, xid_uuid, 16);
+			WSREP_DEBUG("Wsrep checkpoint writing for"
+				" uuid %s xid_seqno %lu trx_sys_cur_xid_seqno %lu trx_state %d",
+				uuid_str, xid_seqno, trx_sys_cur_xid_seqno, trx ? trx->state : -1);
 		}
 
 		trx_sys_cur_xid_seqno = xid_seqno;
diff --git a/storage/xtradb/trx/trx0trx.cc b/storage/xtradb/trx/trx0trx.cc
index 6a033fbeb09..503e3dd230c 100644
--- a/storage/xtradb/trx/trx0trx.cc
+++ b/storage/xtradb/trx/trx0trx.cc
@@ -1232,7 +1232,7 @@ trx_write_serialisation_history(
 	/* Update latest MySQL wsrep XID in trx sys header. */
 	if (wsrep_is_wsrep_xid(&trx->xid))
 	{
-		trx_sys_update_wsrep_checkpoint(&trx->xid, sys_header, mtr);
+		trx_sys_update_wsrep_checkpoint(&trx->xid, sys_header, mtr, trx);
 	}
 #endif /* WITH_WSREP */
 
