diff --git a/web/pingallm.py b/web/pingallm.py
index e377a55..43f10ad 100755
--- a/web/pingallm.py
+++ b/web/pingallm.py
@@ -2,60 +2,76 @@
 import sys
 import time
 import os
+import re
 
 hosts=['onosdevz1', 'onosdevz2', 'onosdevz3', 'onosdevz4', 'onosdevz5', 'onosdevz6', 'onosdevz7', 'onosdevz8']
-filename = sys.argv[1]
-
 ping_cnt=3
-wait=ping_cnt
+wait1=ping_cnt
+wait2=10
 
-os.popen("rm -f /tmp/ping*")
 
-f = open(filename, 'r')
-nr_ping = 0
-for line in f:
-  if line[0] != "#":
-    fid=int(line.strip().split()[0])
-    src_dpid=line.strip().split()[2]
-    dst_dpid=line.strip().split()[4]
-    src_nwid=int(src_dpid.split(':')[-2], 16)
-    dst_nwid=int(dst_dpid.split(':')[-2], 16)
-    src_hostid=int(src_dpid.split(':')[-1], 16)
-    dst_hostid=int(dst_dpid.split(':')[-1], 16)
-    cmd="echo \"192.168.%d.%d -> 192.168.%d.%d\" > /tmp/ping.%d" % (src_nwid, src_hostid, dst_nwid, dst_hostid,fid)
-    os.popen(cmd)
-    cmd="ssh %s \'${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\'\' >> /tmp/ping.%d 2>&1 &" % (hosts[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,fid)
-#    print cmd
-    result = os.popen(cmd).read()
-    time.sleep(0.2)
-    nr_ping = nr_ping + 1
+def do_pingall():
 
-print "waiting for ping(s) to finish (%d sec)" % (wait)
-time.sleep(wait)
-cmd="cat /tmp/ping.* | grep loss |wc -l"
-wait_cnt=0
-while 1:
-  nr_done = int(os.popen(cmd).read())
-  if nr_done == nr_ping or wait_cnt > 10:
-    break
-  print "%d ping finished" % nr_done
-  time.sleep(1)
-  wait_cnt += 1
+  pid=os.getpid()
+  os.popen("rm -f /tmp/ping.*")
 
-cmd='cat /tmp/ping.* | grep " 0% packet loss" |wc -l'
-nr_success = int(os.popen(cmd).read())
+  filename = sys.argv[1]
+  f = open(filename, 'r')
+  nr_ping = 0
+  for line in f:
+    if line[0] != "#":
+#      logfile="/tmp/ping.pid%d.%d" % (pid, fid)
+      fid=int(line.strip().split()[0])
+      logfile="/tmp/ping.%d" % (fid)
+      src_dpid=line.strip().split()[2]
+      dst_dpid=line.strip().split()[4]
+      src_nwid=int(src_dpid.split(':')[-2], 16)
+      dst_nwid=int(dst_dpid.split(':')[-2], 16)
+      src_hostid=int(src_dpid.split(':')[-1], 16)
+      dst_hostid=int(dst_dpid.split(':')[-1], 16)
+      cmd="echo \"Pingall flow %d : 192.168.%d.%d -> 192.168.%d.%d\" > %s" % (fid, src_nwid, src_hostid, dst_nwid, dst_hostid,logfile)
+      os.popen(cmd)
+      cmd="ssh %s \'${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\'\' >> %s 2>&1 &" % (hosts[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,logfile)
+    #    print cmd
+      result = os.popen(cmd).read()
+      time.sleep(0.2)
+      nr_ping = nr_ping + 1
 
-if nr_success != nr_ping:
-  print "fail: %d ping(s) failed (finished %d total %d)" % (nr_done - nr_success, nr_done, nr_ping)
-else:
-  print "success: all %d ping(s) got through" % (nr_success)
+  f.close()
+  return nr_ping
 
-for i in range(nr_ping):
-  cmd="cat /tmp/ping.%d | grep loss | awk '{print $6}'" % (i+1)
-  cmd2="cat /tmp/ping.%d | head -n 1" % (i+1)
-  result = os.popen(cmd).read().strip()
-  result2 = os.popen(cmd2).read().strip()
-  if result != "0%":
-    print "flow # %d fail (%s)" % (i+1, result2)
+def wait_ping_finish(nr_ping):
+  print "all pings started.. waiting for completion (%d sec)" % (wait1)
+  time.sleep(wait1)
+  cmd="cat /tmp/ping.* | grep \"packet loss\" |wc -l"
+  for i in range(wait2):
+    nr_done = int(os.popen(cmd).read())
+    if nr_done == nr_ping:
+      break
+    print "%d ping finished" % nr_done
+    time.sleep(1)
+  
+  return nr_done
 
-f.close()
+def report(nr_ping, nr_done):
+  cmd='cat /tmp/ping.* | grep " 0% packet loss" |wc -l'
+  nr_success = int(os.popen('cat /tmp/ping.* | grep " 0% packet loss" |wc -l').read())
+  nr_incomplete = nr_ping - nr_done
+  nr_fail = nr_done - nr_success
+
+  print "Pingall Result: success %d fail %d incomplete %d" % (nr_success, nr_fail, nr_incomplete)
+  if nr_fail > 0 or nr_incomplete > 0:
+    for i in range(nr_ping):
+      cmd="cat /tmp/ping.%d | head -n 1" % (i+1)
+      flow_desc = os.popen(cmd).read().strip()
+
+      cmd="cat /tmp/ping.%d | grep \"packet loss\"" % (i+1)
+      result = os.popen(cmd).read().strip()
+
+      if not re.search(" 0% packet loss", result):
+        print "flow # %d %s : %s" % (i+1, flow_desc, result)
+
+if __name__ == "__main__":
+  nr_ping=do_pingall()
+  nr_done=wait_ping_finish(nr_ping)
+  report(nr_ping, nr_done)
