diff --git a/pkg/control/control.go b/pkg/control/control.go
index 7b0760c..b5c60ec 100755
--- a/pkg/control/control.go
+++ b/pkg/control/control.go
@@ -158,7 +158,7 @@
 	params.Payload = trans.Payload.Buf
 	params.Mbuf = nil
 	xapp.Logger.Info("MSG to E2T: %s %s %s", desc, trans.String(), params.String())
-	return c.RmrSend(params)
+	return c.RmrSend(params, 5)
 }
 
 func (c *Control) rmrSendToXapp(desc string, subs *Subscription, trans *TransactionXapp) (err error) {
@@ -173,7 +173,7 @@
 	params.Payload = trans.Payload.Buf
 	params.Mbuf = nil
 	xapp.Logger.Info("MSG to XAPP: %s %s %s", desc, trans.String(), params.String())
-	return c.RmrSend(params)
+	return c.RmrSend(params, 5)
 }
 
 func (c *Control) Consume(params *xapp.RMRParams) (err error) {
diff --git a/pkg/control/subscription.go b/pkg/control/subscription.go
index f66a1f1..c3e1c20 100644
--- a/pkg/control/subscription.go
+++ b/pkg/control/subscription.go
@@ -21,6 +21,7 @@
 
 import (
 	"gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
+	"gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/xapptweaks"
 	"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
 	"sync"
 )
@@ -42,7 +43,7 @@
 }
 
 func (s *Subscription) String() string {
-	return "subs(" + s.ReqId.String() + "/" + s.Meid.RanName + "/" + s.EpList.String() + ")"
+	return "subs(" + s.ReqId.String() + "/" + (&xapptweaks.RMRMeid{s.Meid}).String() + "/" + s.EpList.String() + ")"
 }
 
 func (s *Subscription) GetCachedResponse() (interface{}, bool) {
diff --git a/pkg/control/transaction.go b/pkg/control/transaction.go
index 56dff1d..1298925 100644
--- a/pkg/control/transaction.go
+++ b/pkg/control/transaction.go
@@ -21,6 +21,7 @@
 
 import (
 	"gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
+	"gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/xapptweaks"
 	"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
 	"strconv"
 	"sync"
@@ -52,7 +53,7 @@
 }
 
 func (t *Transaction) String() string {
-	return "trans(" + strconv.FormatUint(uint64(t.Seq), 10) + "/" + t.Meid.RanName + ")"
+	return "trans(" + strconv.FormatUint(uint64(t.Seq), 10) + "/" + (&xapptweaks.RMRMeid{t.Meid}).String() + ")"
 }
 
 func (t *Transaction) SendEvent(event interface{}, waittime time.Duration) (bool, bool) {
diff --git a/pkg/teststub/controlRmrStub.go b/pkg/teststub/controlRmrStub.go
index a01a0a5..e486d13 100644
--- a/pkg/teststub/controlRmrStub.go
+++ b/pkg/teststub/controlRmrStub.go
@@ -156,7 +156,7 @@
 	for ; i <= seconds*2 && status == false; i++ {
 
 		rmr.GetLogger().Info("SEND TESTPING: %s", params.String())
-		rmr.RmrSend(params)
+		rmr.RmrSend(params, 0)
 
 		status = true
 		for _, val := range allRmrStubs {
diff --git a/pkg/teststubdummy/stubRmrDummy.go b/pkg/teststubdummy/stubRmrDummy.go
index 77e4b7d..c08036f 100644
--- a/pkg/teststubdummy/stubRmrDummy.go
+++ b/pkg/teststubdummy/stubRmrDummy.go
@@ -66,7 +66,7 @@
 	params.Xid = "TEST"
 	params.Mbuf = nil
 
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "%s", snderr.Error())
 	}
@@ -104,7 +104,7 @@
 		params.Xid = msg.Xid
 		params.Mbuf = nil
 		rmr.GetLogger().Info("SEND DUMMY RESP: %s", params.String())
-		err := rmr.RmrSend(params)
+		err := rmr.RmrSend(params, 5)
 		if err != nil {
 			rmr.GetLogger().Error("RmrDummyHandleMessage: err(%s)", err.Error())
 		}
diff --git a/pkg/teststube2ap/stubE2.go b/pkg/teststube2ap/stubE2.go
index a5dfa54..0ebb29f 100644
--- a/pkg/teststube2ap/stubE2.go
+++ b/pkg/teststube2ap/stubE2.go
@@ -43,7 +43,7 @@
 }
 
 func (trans *RmrTransactionId) String() string {
-	return "trans(" + trans.xid + "/" + trans.meid.RanName + ")"
+	return "trans(" + trans.xid + "/" + (&xapptweaks.RMRMeid{trans.meid}).String() + ")"
 }
 
 type E2Stub struct {
@@ -205,7 +205,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB REQ: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s %s", trans.String(), snderr.Error())
 		return nil
@@ -290,7 +290,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB RESP: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s", snderr.Error())
 	}
@@ -363,7 +363,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB FAIL: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s", snderr.Error())
 	}
@@ -446,7 +446,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB DEL REQ: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s %s", trans.String(), snderr.Error())
 		return nil
@@ -516,7 +516,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB DEL RESP: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s", snderr.Error())
 	}
@@ -588,7 +588,7 @@
 	params.Mbuf = nil
 
 	tc.Logger.Info("SEND SUB DEL FAIL: %s", params.String())
-	snderr := tc.RmrSend(params)
+	snderr := tc.RmrSend(params, 5)
 	if snderr != nil {
 		tc.TestError(t, "RMR SEND FAILED: %s", snderr.Error())
 	}
diff --git a/pkg/xapptweaks/rmrparams.go b/pkg/xapptweaks/rmrparams.go
index f0ac9fb..30f42fd 100644
--- a/pkg/xapptweaks/rmrparams.go
+++ b/pkg/xapptweaks/rmrparams.go
@@ -29,14 +29,46 @@
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
+type RMRMeid struct {
+	*xapp.RMRMeid
+}
+
+func (meid *RMRMeid) String() string {
+	str := "meid("
+	pad := ""
+	if len(meid.PlmnID) > 0 {
+		str += pad + "PlmnID=" + meid.PlmnID
+		pad = " "
+	}
+	if len(meid.EnbID) > 0 {
+		str += pad + "EnbID=" + meid.EnbID
+		pad = " "
+	}
+	if len(meid.RanName) > 0 {
+		str += pad + "RanName=" + meid.RanName
+		pad = " "
+	}
+	str += ")"
+	return str
+}
+
+func NewMeid(meid *xapp.RMRMeid) *RMRMeid {
+	if meid != nil {
+		return &RMRMeid{meid}
+	}
+	return &RMRMeid{&xapp.RMRMeid{}}
+}
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
 type RMRParams struct {
 	*xapp.RMRParams
 }
 
 func (params *RMRParams) String() string {
 	var b bytes.Buffer
-	sum := md5.Sum(params.Payload)
-	fmt.Fprintf(&b, "params(Src=%s Mtype=%d SubId=%d Xid=%s Meid=%s Paylens=%d/%d Payhash=%x)", params.Src, params.Mtype, params.SubId, params.Xid, params.Meid.RanName, params.PayloadLen, len(params.Payload), sum)
+	fmt.Fprintf(&b, "params(Src=%s Mtype=%d SubId=%d Xid=%s Meid=%s Paylens=%d/%d Paymd5=%x)", params.Src, params.Mtype, params.SubId, params.Xid, (&RMRMeid{params.Meid}).String(), params.PayloadLen, len(params.Payload), md5.Sum(params.Payload))
 	return b.String()
 }
 
diff --git a/pkg/xapptweaks/rmrwrapper.go b/pkg/xapptweaks/rmrwrapper.go
index ef633bd..ac602bf 100644
--- a/pkg/xapptweaks/rmrwrapper.go
+++ b/pkg/xapptweaks/rmrwrapper.go
@@ -47,14 +47,16 @@
 func (tc *RmrWrapper) Init() {
 }
 
-func (tc *RmrWrapper) RmrSend(params *RMRParams) (err error) {
+func (tc *RmrWrapper) RmrSend(params *RMRParams, to time.Duration) (err error) {
 	if tc.Rmr == nil {
 		err = fmt.Errorf("Failed rmr object nil for %s", params.String())
 		return
 	}
-	status := false
-	i := 1
-	for ; i <= 10 && status == false; i++ {
+	tc.Lock()
+	status := tc.Rmr.Send(params.RMRParams, false)
+	tc.Unlock()
+	i := 0
+	for ; i < int(to)*2 && status == false; i++ {
 		tc.Lock()
 		status = tc.Rmr.Send(params.RMRParams, false)
 		tc.Unlock()
diff --git a/pkg/xapptweaks/xappwrapper.go b/pkg/xapptweaks/xappwrapper.go
index 8b7c91d..faf3c18 100644
--- a/pkg/xapptweaks/xappwrapper.go
+++ b/pkg/xapptweaks/xappwrapper.go
@@ -21,13 +21,14 @@
 
 import (
 	"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+	"time"
 )
 
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
 type XAppWrapperIf interface {
-	RmrSend(params *RMRParams) (err error)
+	RmrSend(params *RMRParams, to time.Duration) (err error)
 	GetLogger() *xapp.Log
 }
 
