diff --git a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py b/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
index e485755..a84d3b0 100644
--- a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
+++ b/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
@@ -30,14 +30,13 @@
 
     global itemName
     itemName = name
-    h1Name = host1
-    h2Name = host2
     h1Id = host1Id
     h2Id = host2Id
     h1Mac = mac1
     h2Mac = mac2
     vlan1 = vlan1
     vlan2 = vlan2
+    hostNames = [ host1 , host2 ]
     intentsId = []
     stepResult = main.TRUE
     pingResult = main.TRUE
@@ -50,17 +49,17 @@
 
     if main.hostsData:
         if not h1Mac:
-            h1Mac = main.hostsData[ h1Name ][ 'mac' ]
+            h1Mac = main.hostsData[ host1 ][ 'mac' ]
         if not h2Mac:
-            h2Mac = main.hostsData[ h2Name ][ 'mac' ]
-        if main.hostsData[ h1Name ][ 'vlan' ] != '-1':
-            vlan1 = main.hostsData[ h1Name ][ 'vlan' ]
-        if main.hostsData[ h2Name ][ 'vlan' ] != '-1':
-            vlan2 = main.hostsData[ h2Name ][ 'vlan' ]
+            h2Mac = main.hostsData[ host2 ][ 'mac' ]
+        if main.hostsData[ host1 ][ 'vlan' ] != '-1':
+            vlan1 = main.hostsData[ host1 ][ 'vlan' ]
+        if main.hostsData[ host2 ][ 'vlan' ] != '-1':
+            vlan2 = main.hostsData[ host2 ][ 'vlan' ]
         if not h1Id:
-            h1Id = main.hostsData[ h1Name ][ 'id' ]
+            h1Id = main.hostsData[ host1 ][ 'id' ]
         if not h2Id:
-            h2Id = main.hostsData[ h2Name ][ 'id' ]
+            h2Id = main.hostsData[ host2 ][ 'id' ]
 
     assert h1Id and h2Id, "You must specify host IDs"
     if not ( h1Id and h2Id ):
@@ -69,8 +68,8 @@
 
     # Discover hosts using arping
     main.log.info( itemName + ": Discover host using arping" )
-    main.Mininet1.arping( host=h1Name )
-    main.Mininet1.arping( host=h2Name )
+    main.Mininet1.arping( host=host1 )
+    main.Mininet1.arping( host=host2 )
     host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
     host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
 
@@ -89,13 +88,13 @@
     checkFlowsState( main )
 
     # Ping hosts
-    firstPingResult = pingHost( main, h1Name, h2Name )
+    firstPingResult = pingallHosts( main, hostNames )
     if not firstPingResult:
-        main.log.info( "First ping failed, there must be" +
+        main.log.debug( "First ping failed, there must be" +
                        " something wrong with ONOS performance" )
 
     # Ping hosts again...
-    pingResult = pingHost( main, h1Name, h2Name )
+    pingResult = pingResult and pingallHosts( main, hostNames )
     time.sleep( 5 )
 
     # Test rerouting if these variables exist
@@ -111,7 +110,7 @@
         topoResult = checkTopology( main, expectedLink )
 
         # Ping hosts
-        pingResult = pingResult and  pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -119,7 +118,7 @@
         if linkDownResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link down" )
         else:
-            main.log.info( itemName + ": Failed to bring link down" )
+            main.log.error( itemName + ": Failed to bring link down" )
 
         # link up
         linkUpResult = link( main, sw1, sw2, "up" )
@@ -132,7 +131,7 @@
         topoResult = checkTopology( main, main.numLinks )
 
         # Ping hosts
-        pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -140,7 +139,7 @@
         if linkUpResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link back up" )
         else:
-            main.log.info( itemName + ": Failed to bring link back up" )
+            main.log.error( itemName + ": Failed to bring link back up" )
 
     # Remove all intents
     removeIntentResult = removeAllIntents( main, intentsId )
@@ -181,8 +180,9 @@
 
     global itemName
     itemName = name
-    h1Name = host1
-    h2Name = host2
+    host1 = host1
+    host2 = host2
+    hostNames = [ host1, host2 ]
     intentsId = []
 
     pingResult = main.TRUE
@@ -236,13 +236,13 @@
     checkFlowsState( main )
 
     # Ping hosts
-    firstPingResult = pingHost( main, h1Name, h2Name )
+    firstPingResult = pingallHosts( main, hostNames )
     if not firstPingResult:
-        main.log.info( "First ping failed, there must be" +
+        main.log.debug( "First ping failed, there must be" +
                        " something wrong with ONOS performance" )
 
     # Ping hosts again...
-    pingResult = pingHost( main, h1Name, h2Name )
+    pingResult = pingResult and pingallHosts( main, hostNames )
     time.sleep( 5 )
 
     # Test rerouting if these variables exist
@@ -258,7 +258,7 @@
         topoResult = checkTopology( main, expectedLink )
 
         # Ping hosts
-        pingResult = pingResult and  pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -266,7 +266,7 @@
         if linkDownResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link down" )
         else:
-            main.log.info( itemName + ": Failed to bring link down" )
+            main.log.error( itemName + ": Failed to bring link down" )
 
         # link up
         linkUpResult = link( main, sw1, sw2, "up" )
@@ -279,7 +279,7 @@
         topoResult = checkTopology( main, main.numLinks )
 
         # Ping hosts
-        pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -287,7 +287,7 @@
         if linkUpResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link back up" )
         else:
-            main.log.info( itemName + ": Failed to bring link back up" )
+            main.log.error( itemName + ": Failed to bring link back up" )
 
     # Remove all intents
     removeIntentResult = removeAllIntents( main, intentsId )
@@ -333,31 +333,41 @@
     tempHostsData = {}
     intentsId = []
 
+    macsDict = {}
+    ipDict = {}
     if hostNames and devices:
         if len( hostNames ) != len( devices ):
-            main.log.error( "hosts and devices does not have the same length" )
-            print "len hostNames = ", len( hostNames )
-            print "len devices = ", len( devices )
+            main.log.debug( "hosts and devices does not have the same length" )
+            #print "len hostNames = ", len( hostNames )
+            #print "len devices = ", len( devices )
             return main.FALSE
         if ports:
             if len( ports ) != len( devices ):
                 main.log.error( "Ports and devices does " +
                                 "not have the same length" )
-                print "len devices = ", len( devices )
-                print "len ports = ", len( ports )
+                #print "len devices = ", len( devices )
+                #print "len ports = ", len( ports )
                 return main.FALSE
+        for i in range( len( devices ) ):
+            macsDict[ devices[ i ] ] = macs[ i ]
         else:
             main.log.info( "Device Ports are not specified" )
     elif hostNames and not devices and main.hostsData:
+        devices = []
         main.log.info( "singleToMultiIntent function is using main.hostsData" ) 
+        for host in hostNames:
+               print main.hostsData.get( host ).get( 'location' )
+               devices.append( main.hostsData.get( host ).get( 'location' ) )
+               macsDict[ main.hostsData.get( host ).get( 'location' ) ] = \
+                           main.hostsData.get( host ).get( 'mac' )
+               ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
+                           main.hostsData.get( host ).get( 'ipAddresses' )
         print main.hostsData
 
-    print 'host names = ', hostNames
-    print 'devices = ', devices
 
-    macsDict = {}
-    for i in range( len( devices ) ):
-        macsDict[ devices[ i ] ] = macs[ i ]
+    print 'host names = ', hostNames
+
+    print 'devices = ', devices
 
     print "macsDict = ", macsDict
 
@@ -385,13 +395,20 @@
         else:
             portIngress = ""
             portEgressList = None
+        if not macsDict:
+            srcMac = ""
+        else:
+            srcMac = macsDict[ ingressDevice ]
+            if srcMac == None:
+                srcMac = ""
+
         intentsId.append( main.CLIs[ 0 ].addSinglepointToMultipointIntent(
                                             ingressDevice=ingressDevice,
                                             egressDeviceList=egressDeviceList,
                                             portIngress=portIngress,
                                             portEgressList=portEgressList,
                                             ethType=ethType,
-                                            ethSrc="",
+                                            ethSrc=srcMac,
                                             bandwidth=bandwidth,
                                             lambdaAlloc=lambdaAlloc,
                                             ipProto=ipProto,
@@ -400,13 +417,7 @@
                                             tcpSrc="",
                                             tcpDst="" ) )
 
-    pingHost( main, hostNames[ 0 ], hostNames[ 1 ] )
-    pingHost( main, hostNames[ 0 ], hostNames[ 2 ] )
-    pingHost( main, hostNames[ 1 ], hostNames[ 2 ] )
-    pingHost( main, hostNames[ 1 ], hostNames[ 0 ] )
-    pingHost( main, hostNames[ 2 ], hostNames[ 1 ] )
-    pingHost( main, hostNames[ 2 ], hostNames[ 0 ] )
-    return main.TRUE
+    pingResult = pingallHosts( main, hostNames )
 
     # Check intents state
     time.sleep( 30 )
@@ -416,9 +427,9 @@
     checkFlowsState( main )
 
     # Ping hosts
-    pingHost( main, h1Name, h2Name )
+    pingResult = pingResult and pingallHosts( main, hostNames )
     # Ping hosts again...
-    pingResult = pingHost( main, h1Name, h2Name )
+    pingResult = pingResult and pingallHosts( main, hostNames )
     time.sleep( 5 )
 
     # Test rerouting if these variables exist
@@ -434,7 +445,7 @@
         topoResult = checkTopology( main, expectedLink )
 
         # Ping hosts
-        pingResult = pingResult and  pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -442,7 +453,7 @@
         if linkDownResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link down" )
         else:
-            main.log.info( itemName + ": Failed to bring link down" )
+            main.log.error( itemName + ": Failed to bring link down" )
 
         # link up
         linkUpResult = link( main, sw1, sw2, "up" )
@@ -455,7 +466,7 @@
         topoResult = checkTopology( main, main.numLinks )
 
         # Ping hosts
-        pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        pingResult = pingResult and pingallHosts( main, hostNames )
 
         intentResult = checkIntentState( main, intentsId )
 
@@ -463,7 +474,7 @@
         if linkUpResult and topoResult and pingResult and intentResult:
             main.log.info( itemName + ": Successfully brought link back up" )
         else:
-            main.log.info( itemName + ": Failed to bring link back up" )
+            main.log.error( itemName + ": Failed to bring link back up" )
 
     # Remove all intents
     removeIntentResult = removeAllIntents( main, intentsId )
@@ -473,41 +484,13 @@
 
     return stepResult
 
-def pingHost( main, h1Name, h2Name ):
-
-    # Ping hosts
-    main.log.info( itemName + ": Ping " + h1Name + " and " +
-                   h2Name )
-    pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
-    if not pingResult1:
-        main.log.info( itemName + ": " + h1Name + " cannot ping "
-                       + h2Name )
-    pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
-    if not pingResult2:
-        main.log.info( itemName + ": " + h2Name + " cannot ping "
-                       + h1Name )
-    pingResult = pingResult1 and pingResult2
-    if pingResult:
-        main.log.info( itemName + ": Successfully pinged " +
-                       "both hosts" )
-    else:
-        main.log.info( itemName + ": Failed to ping " +
-                       "both hosts" )
-    return pingResult
-
-def pingAllHost( main, hosts ):
+def pingallHosts( main, hostList, pingType="ipv4" ):
     # Ping all host in the hosts list variable
-    import itertools
-    print "Pinging : ", hosts
-    hostCombination = itertools.permutations( hosts, 2 )
+    print "Pinging : ", hostList
     pingResult = main.TRUE
-    for hostPair in hostCombination:
-        pingResult = pingResult and main.Mininet.pingHost(
-                                                       src=hostPair[ 0 ],
-                                                       target=hostPair[ 1 ] )
+    pingResult = main.Mininet1.pingallHosts( hostList, pingType )
     return pingResult
 
-
 def getHostsData( main ):
     """
         Use fwd app and pingall to discover all the hosts
@@ -518,14 +501,15 @@
     import json
     activateResult = main.TRUE
     appCheck = main.TRUE
+    getDataResult = main.TRUE
     main.log.info( "Activating reactive forwarding app " )
     activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
 
     for i in range( main.numCtrls ):
         appCheck = appCheck and main.CLIs[ i ].appToIDCheck()
         if appCheck != main.TRUE:
-            main.log.warn( main.CLIs[ 0 ].apps() )
-            main.log.warn( main.CLIs[ 0 ].appIDs() )
+            main.log.warn( main.CLIs[ i ].apps() )
+            main.log.warn( main.CLIs[ i ].appIDs() )
 
     pingResult = main.Mininet1.pingall()
     hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
@@ -545,14 +529,16 @@
 
     main.log.info( "Deactivating reactive forwarding app " )
     deactivateResult = main.CLIs[ 0 ].deactivateApp( "org.onosproject.fwd" )
-    if activateResult and deactivateResult and pingResult:
+    if activateResult and deactivateResult and main.hostsData:
         main.log.info( "Successfully used fwd app to discover hosts " )
+        getDataResult = main.TRUE
     else:
         main.log.info( "Failed to use fwd app to discover hosts " )
+        getDataResult = main.FALSE
 
-    main.log.info( "Hosts data:\n "+ main.hostsData )
+    print main.hostsData
 
-    return pingResult
+    return getDataResult
 
 def checkTopology( main, expectedLink ):
     statusResult = main.TRUE
@@ -611,13 +597,13 @@
     time.sleep( 5 )
     # Checks if there is remaining intents using intents()
     intentsRemaining = main.CLIs[ 0 ].intents()
-    print intentsRemaining
     # If there is remianing intents then remove intents should fail
-    if not intentsRemaining:
+    if intentsRemaining == []:
         main.log.info( itemName + ": There are " +
                        str( len( intentsRemaining ) ) + " intents remaining, "
                        + "failed to remove all the intents " )
         removeIntentResult = main.FALSE
+        main.log.info( intentsRemaining )
     else:
         main.log.info( itemName + ": There are no intents remaining, " +
                        "successfully removed all the intents." )
diff --git a/TestON/tests/FuncIntent/FuncIntent.params b/TestON/tests/FuncIntent/FuncIntent.params
index 97ed9f7..7535811 100755
--- a/TestON/tests/FuncIntent/FuncIntent.params
+++ b/TestON/tests/FuncIntent/FuncIntent.params
@@ -1,6 +1,6 @@
 <PARAMS>
 
-    <testcases>10,11,12,1001,1002,1003</testcases>
+    <testcases>10,11,12,13,1001,1002,1003</testcases>
 
     <SCALE>1,3</SCALE>
     <availableNodes>3</availableNodes>
diff --git a/TestON/tests/FuncIntent/FuncIntent.py b/TestON/tests/FuncIntent/FuncIntent.py
index a5137fa..6d5137d 100644
--- a/TestON/tests/FuncIntent/FuncIntent.py
+++ b/TestON/tests/FuncIntent/FuncIntent.py
@@ -251,7 +251,7 @@
         stepResult = main.TRUE
         main.step( "Discover all hosts using pingall " )
         stepResult = main.wrapper.getHostsData( main )
-        utilities.assert_equals( expect=main.FALSE,
+        utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully discovered hosts",
                                  onfail="Failed to discover hosts" )
@@ -421,7 +421,7 @@
         macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
         stepResult = main.wrapper.singleToMultiIntent(
                                          main,
-                                         name="",
+                                         name="IPV4",
                                          hostNames=hostNames,
                                          devices=devices,
                                          ports=None,
@@ -432,9 +432,9 @@
                                          ipProto="",
                                          ipAddresses="",
                                          tcp="",
-                                         sw1="",
-                                         sw2="",
-                                         expectedLink=0 )
+                                         sw1="s5",
+                                         sw2="s2",
+                                         expectedLink=18 )
 
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
@@ -442,6 +442,25 @@
                                         + " to multi point intents",
                                  onfail="IPV4: Failed to add single point" +
                                         " to multi point intents" )
+
+        main.step( "IPV4_2: Add single point to multi point intents" )
+        hostNames = [ 'h8', 'h16', 'h24' ]
+        devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
+                    'of:0000000000000007/8' ]
+        macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
+        stepResult = main.wrapper.singleToMultiIntent(
+                                         main,
+                                         name="IPV4",
+                                         hostNames=hostNames,
+                                         ethType="IPV4",
+                                         lambdaAlloc=False )
+
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="IPV4_2: Successfully added single point"
+                                        + " to multi point intents",
+                                 onfail="IPV4_2: Failed to add single point" +
+                                        " to multi point intents" )
     def CASE1004( self, main ):
         """
             Add multi point to single point intents
