diff --git a/targets/SCRIPTS/msc_gen.py b/targets/SCRIPTS/msc_gen.py
index a6635c2debe3db3a62dcc1ec4a454116315da73d..d4de7c9cf321f6a2f31833420223bff527864aac 100755
--- a/targets/SCRIPTS/msc_gen.py
+++ b/targets/SCRIPTS/msc_gen.py
@@ -11,6 +11,16 @@ import socket
 import datetime
 from datetime import date
 import os, errno
+import argparse
+
+
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--diag_rlc_um", "-u", type=str,help="Try to find RLC protocol diagnostics", default="no")
+parser.add_argument("--dir", "-d", type=str,help="Directory where msc logs can be found", default="/tmp")
+args = parser.parse_args()
+
 
 MSCGEN_OUTPUT_TYPE       = "png"
 MAX_MESSAGES_PER_PAGE    = 36
@@ -65,6 +75,8 @@ g_display_color  = ['\"teal\"',   # To check in msc.h: MSC_NAS_UE
                     '\"black\"'] 
 
 
+# helper for diagnostic of RLC
+g_diag_rlc_sn = {}
 
 g_sequence_generator = 0
 
@@ -83,32 +95,34 @@ def parse_oai_log_files():
     global g_final_display_order_list
     #open TXT file that contain OAI filtered traces for mscgen
     filenames = [
-        '/tmp/openair.msc.ip_ue.log',
-        '/tmp/openair.msc.ip_enb.log',
-        '/tmp/openair.msc.nas_ue.log',
-        '/tmp/openair.msc.pdcp_ue.log',
-        '/tmp/openair.msc.rrc_ue.log',
-        '/tmp/openair.msc.rlc_ue.log',
-        '/tmp/openair.msc.mac_ue.log',
-        '/tmp/openair.msc.phy_ue.log',
-        '/tmp/openair.msc.phy_enb.log',
-        '/tmp/openair.msc.mac_enb.log',
-        '/tmp/openair.msc.rlc_enb.log',
-        '/tmp/openair.msc.pdcp_enb.log',
-        '/tmp/openair.msc.rrc_enb.log',
-        '/tmp/openair.msc.s1ap_enb.log',
-        '/tmp/openair.msc.gtpu_enb.log',
-        '/tmp/openair.msc.mme_app.log',
-        '/tmp/openair.msc.nas_mme.log',
-        '/tmp/openair.msc.nas_emm_mme.log',
-        '/tmp/openair.msc.nas_esm_mme.log',
-        '/tmp/openair.msc.spgwapp_mme.log',
-        '/tmp/openair.msc.s11_mme.log',
-        '/tmp/openair.msc.s6a_mme.log',
-        '/tmp/openair.msc.gtpu_sgw.log',
-        '/tmp/openair.msc.s1ap_mme.log',
-        '/tmp/openair.msc.hss.log']
-
+        args.dir+'/openair.msc.ip_ue.log',
+        args.dir+'/openair.msc.ip_enb.log',
+        args.dir+'/openair.msc.nas_ue.log',
+        args.dir+'/openair.msc.pdcp_ue.log',
+        args.dir+'/openair.msc.rrc_ue.log',
+        args.dir+'/openair.msc.rlc_ue.log',
+        args.dir+'/openair.msc.mac_ue.log',
+        args.dir+'/openair.msc.phy_ue.log',
+        args.dir+'/openair.msc.phy_enb.log',
+        args.dir+'/openair.msc.mac_enb.log',
+        args.dir+'/openair.msc.rlc_enb.log',
+        args.dir+'/openair.msc.pdcp_enb.log',
+        args.dir+'/openair.msc.rrc_enb.log',
+        args.dir+'/openair.msc.s1ap_enb.log',
+        args.dir+'/openair.msc.gtpu_enb.log',
+        args.dir+'/openair.msc.mme_app.log',
+        args.dir+'/openair.msc.nas_mme.log',
+        args.dir+'/openair.msc.nas_emm_mme.log',
+        args.dir+'/openair.msc.nas_esm_mme.log',
+        args.dir+'/openair.msc.spgwapp_mme.log',
+        args.dir+'/openair.msc.s11_mme.log',
+        args.dir+'/openair.msc.s6a_mme.log',
+        args.dir+'/openair.msc.gtpu_sgw.log',
+        args.dir+'/openair.msc.s1ap_mme.log',
+        args.dir+'/openair.msc.hss.log']
+
+    # we may insert diagnostic events
+    event_id_offset = 0
     for filename in filenames:
         try:
             fhandle  = open(filename, 'r')
@@ -118,10 +132,10 @@ def parse_oai_log_files():
             # split file content in lines
             lines = fcontent.splitlines()
             for line in lines:
-                if line.strip() != "":
-                    print ("INPUT LINE:  %s " % line)
+                if line.strip() != ""  and not line.strip().startswith('#'):
+                    #print ("INPUT LINE:  %s " % line)
                     partition = line.split(' ',3)
-                    event_id = int(partition[0])
+                    event_id = int(partition[0]) + event_id_offset
                     event_type = partition[1]
                     entity_id = int(partition[2])
                     if MSC_NEW_STR == event_type:
@@ -133,7 +147,7 @@ def parse_oai_log_files():
 
                     # if line is a trace of a message between 2 protocol entities or layers
                     elif MSC_MSG_STR == event_type:
-                        print ("partition[3]:%s" % partition[3])
+                        #print ("partition[3]:%s" % partition[3])
                         sub_partition = partition[3].split(' ',4)
                         arrow   = sub_partition[0]
                         entity2_id = int(sub_partition[1])
@@ -147,29 +161,52 @@ def parse_oai_log_files():
                         Message['line_color'] = g_display_color[entity_id]
                         Message['text_color'] = g_display_color[entity_id]
                         if arrow == '<-':
+                            if "yes" == args.diag_rlc_um.strip() and "DATA SN " in message and "RB UM " in message:
+                                rlc_key = re.match(r"[^[]*\[([^]]*)\]", message).groups()[0]
+                                sn_info = message.partition("SN")[2]
+                                if sn_info.strip() != "":
+                                    sn_str = sn_info.strip().partition(" ")[0]                                
+                                    sn = int(sn_str)
+                                    if rlc_key in g_diag_rlc_sn:
+                                        previous_sn = g_diag_rlc_sn[rlc_key]
+                                        if (previous_sn + 1) % 1024 != sn:
+                                            print ("DIAG missing SN:  %s " % line)  
+                                            MessageDiag = {}
+                                            MessageDiag['type'] = "box"
+                                            MessageDiag['tx'] = entity_id
+                                            MessageDiag['rx'] = entity_id
+                                            MessageDiag['discarded'] = False
+                                            MessageDiag['time'] = time
+                                            MessageDiag['message'] = "Missing SN "+ sn_str + " detected"
+                                            MessageDiag['line_color'] = '\"red\"'
+                                            MessageDiag['text_color'] = '\"red\"'
+                                            g_messages[event_id + event_id_offset] = MessageDiag
+                                            event_id_offset = event_id_offset + 1                       
+                                    g_diag_rlc_sn[rlc_key] = int(sn)
                             Message['type'] = "rx"
                             Message['tx'] = entity2_id
                             Message['rx'] = entity_id
                             Message['discarded'] = False
-                            g_messages[event_id] = Message
+                            g_messages[event_id + event_id_offset] = Message
+
                         elif arrow == '->':
                             Message['type'] = "tx"
                             Message['tx'] = entity_id
                             Message['rx'] = entity2_id
                             Message['discarded'] = False
-                            g_messages[event_id] = Message
+                            g_messages[event_id + event_id_offset] = Message
                         elif arrow == 'x-':
                             Message['type'] = "rx"
                             Message['tx'] = entity2_id
                             Message['rx'] = entity_id
                             Message['discarded'] = True
-                            g_messages[event_id] = Message
+                            g_messages[event_id + event_id_offset] = Message
                         elif arrow == '-x':
                             Message['type'] = "tx"
                             Message['tx'] = entity_id
                             Message['rx'] = entity2_id
                             Message['discarded'] = True
-                            g_messages[event_id] = Message
+                            g_messages[event_id + event_id_offset] = Message
 
                     elif MSC_BOX_STR == event_type:
                         sub_partition = partition[3].split(' ',1)
@@ -184,9 +221,10 @@ def parse_oai_log_files():
                         Message['message'] = message
                         Message['line_color'] = g_display_color[entity_id]
                         Message['text_color'] = g_display_color[entity_id]
-                        g_messages[event_id] = Message
+                        g_messages[event_id + event_id_offset] = Message
 
         except IOError, e:  
+            print ("INPUT LINE:  %s " % line)
             print 'err message'
 
     #print("------------------------------------")
@@ -202,7 +240,7 @@ def msc_chart_write_header(fileP):
     fileP.write("width = \"2048\";\n")
 
     entity_line_list_str = ''
-    print ("  %s " % ( g_proto_names ) )
+    #print ("  %s " % ( g_proto_names ) )
     for entity in g_proto_names:
         if entity != 'NotDeclared':
             entity_line_list_str = entity_line_list_str + ' ' + entity + ','
@@ -237,8 +275,8 @@ g_page_index    = 0
 g_message_index = 0
 g_now = datetime.datetime.now()
 g_now_formated = 'mscgen_' + g_now.strftime("%Y-%m-%d_%H.%M.%S")
-g_currentdir = os.curdir
-g_resultdir = os.path.join(g_currentdir, g_now_formated)
+#g_currentdir = os.curdir
+g_resultdir = os.path.join(args.dir, g_now_formated)
 os.mkdir(g_resultdir)
 os.chdir(g_resultdir)