diff --git a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py b/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
index f6996bb..07944aa 100644
--- a/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
+++ b/TestON/tests/FuncIntent/Dependency/FuncIntentFunction.py
@@ -5,24 +5,41 @@
 def __init__( self ):
     self.default = ''
 
-def addHostIntent( main, item ):
+def hostIntent( main,
+                name="",
+                host1="",
+                host2="",
+                host1Id="",
+                host2Id="",
+                mac1="",
+                mac2="",
+                vlan1="-1",
+                vlan2="-1",
+                sw1="",
+                sw2="",
+                expectedLink=0 ):
     """
         Add host intents
     """
     import time
-    stepResult = main.TRUE
+
+    # Assert variables
+    assert main, "There is no main variable"
+    assert name, "variable name is empty"
+    assert host1 and host2, "You must specify hosts"
+
     global itemName
-    itemName = item[ 'name' ]
-    h1Name = item[ 'host1' ][ 'name' ]
-    h2Name = item[ 'host2' ][ 'name' ]
-    h1Mac = item[ 'host1' ][ 'MAC' ]
-    h2Mac = item[ 'host2' ][ 'MAC' ]
-    h1Id = item[ 'host1' ][ 'id']
-    h2Id = item[ 'host2' ][ 'id']
-    sw1 = item[ 'link' ][ 'switch1' ]
-    sw2 = item[ 'link' ][ 'switch2' ]
-    expectLink = item[ 'link' ][ 'expect' ]
+    itemName = name
+    h1Name = host1
+    h2Name = host2
+    h1Id = host1Id
+    h2Id = host2Id
+    h1Mac = mac1
+    h2Mac = mac2
+    vlan1 = vlan1
+    vlan2 = vlan2
     intentsId = []
+    stepResult = main.TRUE
     pingResult = main.TRUE
     intentResult = main.TRUE
     flowResult = main.TRUE
@@ -30,6 +47,25 @@
     linkDownResult = main.TRUE
     linkUpResult = main.TRUE
 
+    if main.hostsData:
+        if not h1Mac:
+            h1Mac = main.hostsData[ h1Name ][ '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' ]
+        if not h1Id:
+            h1Id = main.hostsData[ h1Name ][ 'id' ]
+        if not h2Id:
+            h2Id = main.hostsData[ h2Name ][ 'id' ]
+
+    assert h1Id and h2Id, "You must specify host IDs"
+    if not ( h1Id and h2Id ):
+        main.log.info( "There are no host IDs" )
+        return main.FALSE
+
     # Discover hosts using arping
     main.log.info( itemName + ": Discover host using arping" )
     main.Mininet1.arping( host=h1Name )
@@ -60,33 +96,35 @@
     pingResult = pingHost( main, h1Name, h2Name )
     time.sleep( 5 )
 
-    # link down
-    link( main, sw1, sw2, "down" )
-    intentResult = intentResult and checkIntentState( main, intentsId )
+    # Test rerouting if these variables exist
+    if sw1 and sw2 and expectedLink:
+        # link down
+        link( main, sw1, sw2, "down" )
+        intentResult = intentResult and checkIntentState( main, intentsId )
 
-    # Verify flows
-    checkFlowsState( main )
+        # Verify flows
+        checkFlowsState( main )
 
-    # Check OnosTopology
-    topoResult = checkTopology( main, expectLink )
+        # Check OnosTopology
+        topoResult = checkTopology( main, expectedLink )
 
-    # Ping hosts
-    pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        # Ping hosts
+        pingResult = pingResult and pingHost( main, h1Name, h2Name )
 
-    intentResult = checkIntentState( main, intentsId )
+        intentResult = checkIntentState( main, intentsId )
 
-    # link up
-    link( main, sw1, sw2, "up" )
-    time.sleep( 5 )
+        # link up
+        link( main, sw1, sw2, "up" )
+        time.sleep( 5 )
 
-    # Verify flows
-    checkFlowsState( main )
+        # Verify flows
+        checkFlowsState( main )
 
-    # Check OnosTopology
-    topoResult = checkTopology( main, expectLink )
+        # Check OnosTopology
+        topoResult = checkTopology( main, expectedLink )
 
-    # Ping hosts
-    pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        # Ping hosts
+        pingResult = pingResult and pingHost( main, h1Name, h2Name )
 
     # Remove intents
     for intent in intentsId:
@@ -98,80 +136,40 @@
 
     return stepResult
 
-def addPointIntent( main, item ):
+def pointIntent( main,
+                 name="",
+                 host1="",
+                 host2="",
+                 deviceId1="",
+                 deviceId2="",
+                 port1="",
+                 port2="",
+                 ethType="",
+                 mac1="",
+                 mac2="",
+                 bandwidth="",
+                 lambdaAlloc=False,
+                 ipProto="",
+                 ip1="",
+                 ip2="",
+                 tcp1="",
+                 tcp2="",
+                 sw1="",
+                 sw2="",
+                 expectedLink=0 ):
     """
         Add Point intents
     """
     import time
-    stepResult = main.TRUE
+    assert main, "There is no main variable"
+    assert name, "variable name is empty"
+    assert host1 and host2, "You must specify hosts"
+
     global itemName
-    itemName = item[ 'name' ]
-    h1Name = item[ 'host1' ][ 'name' ]
-    h2Name = item[ 'host2' ][ 'name' ]
-    ingressDevice = item[ 'ingressDevice' ]
-    egressDevice = item[ 'egressDevice' ]
-    option = item[ 'option' ]
-    sw1 = item[ 'link' ][ 'switch1' ]
-    sw2 = item[ 'link' ][ 'switch2' ]
-    expectLink = item[ 'link' ][ 'expect' ]
+    itemName = name
+    h1Name = host1
+    h2Name = host2
     intentsId = []
-    
-    # Assign options to variables
-    ingressPort = item.get( 'ingressPort' )
-    egressPort = item.get( 'egressPort' )
-    ethType = option.get( 'ethType' )
-    ethSrc = option.get( 'ethSrc' )
-    ethDst = option.get( 'ethDst' )
-    bandwidth = option.get( 'bandwidth' )
-    lambdaAlloc = option.get( 'lambdaAlloc' )
-    ipProto = option.get( 'ipProto' )
-    ipSrc = option.get( 'ipSrc' )
-    ipDst = option.get( 'ipDst' )
-    tcpSrc = option.get( 'tcpSrc' )
-    tcpDst = option.get( 'tcpDst' )
-
-    if ingressPort == None:
-        ingressPort = ""
-    if egressPort == None:
-        egressPort = ""
-    if ethType == None:
-        ethType = ""
-    if ethSrc == None:
-        ethSrc = ""
-    if ethDst == None:
-        ethDst = ""
-    if bandwidth == None:
-        bandwidth = ""
-    if lambdaAlloc == None:
-        lambdaAlloc = False
-    if ipProto == None:
-        ipProto = ""
-    if ipSrc == None:
-        ipSrc = ""
-    if ipDst == None:
-        ipDst = ""
-    if tcpSrc == None:
-        tcpSrc = ""
-    if tcpDst == None:
-        tcpDst = ""
-
-    """
-    print 'ethType: ', ethType
-    print 'ethSrc: ', ethSrc
-    print 'ethDst: ', ethDst
-    print 'bandwidth', bandwidth
-    print 'lambdaAlloc: ', lambdaAlloc
-    print 'ipProto: ', ipProto
-    print 'ipSrc: ', ipSrc
-    print 'ipDst:', ipDst
-    print 'tcpSrc: ', tcpSrc
-    print 'tcpDst: ', tcpDst
-    """
-    addedOption = ""
-    for i in range( len( option ) ):
-        addedOption = addedOption + option.keys()[ i ] + " = " + \
-                      option.values()[ i ] + "\n"
-    main.log.info( itemName + ": Printing added options...\n" + addedOption )
 
     pingResult = main.TRUE
     intentResult = main.TRUE
@@ -182,37 +180,37 @@
 
     # Adding bidirectional point  intents
     main.log.info( itemName + ": Adding host intents" )
-    intent1 = main.CLIs[ 0 ].addPointIntent( ingressDevice=ingressDevice,
-                                             egressDevice=egressDevice,
-                                             portIngress=ingressPort,
-                                             portEgress=egressPort,
+    intent1 = main.CLIs[ 0 ].addPointIntent( ingressDevice=deviceId1,
+                                             egressDevice=deviceId2,
+                                             portIngress=port1,
+                                             portEgress=port2,
                                              ethType=ethType,
-                                             ethSrc=ethSrc,
-                                             ethDst=ethDst,
+                                             ethSrc=mac1,
+                                             ethDst=mac2,
                                              bandwidth=bandwidth,
                                              lambdaAlloc=lambdaAlloc,
                                              ipProto=ipProto,
-                                             ipSrc=ipSrc,
-                                             ipDst=ipDst,
-                                             tcpSrc=tcpSrc,
-                                             tcpDst=tcpDst )
+                                             ipSrc=ip1,
+                                             ipDst=ip2,
+                                             tcpSrc=tcp1,
+                                             tcpDst=tcp2 )
 
     intentsId.append( intent1 )
     time.sleep( 5 )
-    intent2 = main.CLIs[ 0 ].addPointIntent( ingressDevice=egressDevice,
-                                             egressDevice=ingressDevice,
-                                             portIngress=egressPort,
-                                             portEgress=ingressPort,
+    intent2 = main.CLIs[ 0 ].addPointIntent( ingressDevice=deviceId2,
+                                             egressDevice=deviceId1,
+                                             portIngress=port2,
+                                             portEgress=port1,
                                              ethType=ethType,
-                                             ethSrc=ethDst,
-                                             ethDst=ethSrc,
+                                             ethSrc=mac2,
+                                             ethDst=mac1,
                                              bandwidth=bandwidth,
                                              lambdaAlloc=lambdaAlloc,
                                              ipProto=ipProto,
-                                             ipSrc=ipDst,
-                                             ipDst=ipSrc,
-                                             tcpSrc=tcpDst,
-                                             tcpDst=tcpSrc )
+                                             ipSrc=ip2,
+                                             ipDst=ip1,
+                                             tcpSrc=tcp2,
+                                             tcpDst=tcp1 )
     intentsId.append( intent2 )
 
     # Check intents state
@@ -228,33 +226,34 @@
     pingResult = pingHost( main, h1Name, h2Name )
     time.sleep( 5 )
 
-    # link down
-    link( main, sw1, sw2, "down" )
-    intentResult = intentResult and checkIntentState( main, intentsId )
+    if sw1 and sw2 and expectedLink:
+        # link down
+        link( main, sw1, sw2, "down" )
+        intentResult = intentResult and checkIntentState( main, intentsId )
 
-    # Verify flows
-    checkFlowsState( main )
+        # Verify flows
+        checkFlowsState( main )
 
-    # Check OnosTopology
-    topoResult = checkTopology( main, expectLink )
+        # Check OnosTopology
+        topoResult = checkTopology( main, expectedLink )
 
-    # Ping hosts
-    pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        # Ping hosts
+        pingResult = pingResult and pingHost( main, h1Name, h2Name )
 
-    intentResult = checkIntentState( main, intentsId )
+        intentResult = checkIntentState( main, intentsId )
 
-    # link up
-    link( main, sw1, sw2, "up" )
-    time.sleep( 5 )
+        # link up
+        link( main, sw1, sw2, "up" )
+        time.sleep( 5 )
 
-    # Verify flows
-    checkFlowsState( main )
+        # Verify flows
+        checkFlowsState( main )
 
-    # Check OnosTopology
-    topoResult = checkTopology( main, expectLink )
+        # Check OnosTopology
+        topoResult = checkTopology( main, expectedLink )
 
-    # Ping hosts
-    pingResult = pingResult and pingHost( main, h1Name, h2Name )
+        # Ping hosts
+        pingResult = pingResult and pingHost( main, h1Name, h2Name )
 
     # Remove intents
     for intent in intentsId:
@@ -295,10 +294,43 @@
                        "both hosts" )
     return pingResult
 
-def checkItem( item ):
+def getHostsData( main ):
     """
-        Checks the dictionary
+        Use fwd app and pingall to discover all the hosts
     """
+    """
+        hosts json format:
+    """
+    import json
+    activateResult = main.TRUE
+    appCheck = 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() )
+
+    pingResult = main.Mininet1.pingall()
+    hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
+    hosts = main.Mininet1.getHosts()
+    for host in hosts:
+        main.hostsData[ host ] = {}
+        main.hostsData[ host ][ 'mac' ] =  main.Mininet1.getMacAddress( host )
+        for hostj in hostsJson:
+            if main.hostsData[ host ][ 'mac' ] == hostj[ 'mac' ]:
+                main.hostsData[ host ][ 'id' ] = hostj[ 'id' ]
+                main.hostsData[ host ][ 'vlan' ] = hostj[ 'vlan' ]
+                main.hostsData[ host ][ 'location' ] = \
+                            hostj[ 'location' ][ 'elementId' ] + '/' + \
+                            hostj[ 'location' ][ 'port' ]
+                main.hostsData[ host ][ 'ipAddresses' ] = hostj[ 'ipAddresses' ]
+
+    print main.hostsData
+    return pingResult
 
 def checkTopology( main, expectedLink ):
     statusResult = main.TRUE
diff --git a/TestON/tests/FuncIntent/FuncIntent.params b/TestON/tests/FuncIntent/FuncIntent.params
index 14bda6d..8a1ce1d 100755
--- a/TestON/tests/FuncIntent/FuncIntent.params
+++ b/TestON/tests/FuncIntent/FuncIntent.params
@@ -1,6 +1,6 @@
 <PARAMS>
 
-    <testcases>10,11,12,1001,1002</testcases>
+    <testcases>10,11,12,1002</testcases>
 
     <SCALE>1,3</SCALE>
     <availableNodes>3</availableNodes>
diff --git a/TestON/tests/FuncIntent/FuncIntent.py b/TestON/tests/FuncIntent/FuncIntent.py
index 2ffb25f..19a3c4a 100644
--- a/TestON/tests/FuncIntent/FuncIntent.py
+++ b/TestON/tests/FuncIntent/FuncIntent.py
@@ -52,6 +52,7 @@
         if main.params[ 'GIT' ][ 'pull' ] == 'True':
             PULLCODE = True
         main.case( "Setting up test environment" )
+        main.hostsData = {}
         main.CLIs = []
         for i in range( 1, int( main.numCtrls ) + 1 ):
             main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
@@ -241,6 +242,19 @@
                                         "to controller",
                                  onfail="Failed to assign switches to " +
                                         "controller" )
+    def CASE13( self, main ):
+        """
+            Discover all hosts and store its data to a dictionary
+        """
+        main.case( "Discover all hosts" )
+
+        stepResult = main.TRUE
+        main.step( "IPV4: Add host intents between h1 and h9" )
+        stepResult = main.wrapper.getHostsData( main )
+        utilities.assert_equals( expect=main.FALSE,
+                                 actual=stepResult,
+                                 onpass="Successfully discovered hosts",
+                                 onfail="Failed to discover hosts" )
 
     def CASE1001( self, main ):
         """
@@ -282,45 +296,41 @@
         assert main.numSwitch, "Placed the total number of switch topology in \
                                 main.numSwitch"
 
-        # Local variables
-        ipv4 = { 'name':'IPV4', 'host1':
-                 { 'name': 'h1', 'MAC':'00:00:00:00:00:01',
-                   'id':'00:00:00:00:00:01/-1' } , 'host2':
-                 { 'name':'h9', 'MAC':'00:00:00:00:00:09',
-                   'id':'00:00:00:00:00:09/-1'}, 'link': { 'switch1':'s5',
-                   'switch2':'s2', 'expect':'18' } }
-        dualStack1 = { 'name':'DUALSTACK1', 'host1':
-                 { 'name':'h3', 'MAC':'00:00:00:00:00:03',
-                   'id':'00:00:00:00:00:03/-1' } , 'host2':
-                 { 'name':'h11', 'MAC':'00:00:00:00:00:0B',
-                   'id':'00:00:00:00:00:0B/-1'}, 'link': { 'switch1':'s5',
-                   'switch2':'s2', 'expect':'18' } }
-
         main.case( "Add host intents between 2 host" )
 
         stepResult = main.TRUE
-        main.step( ipv4[ 'name' ] + ": Add host intents between " +
-                   ipv4[ 'host1' ][ 'name' ] + " and " +
-                   ipv4[ 'host2' ][ 'name' ]  )
-        stepResult = main.wrapper.addHostIntent( main, ipv4 )
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass=ipv4[ 'name' ] +
-                                        ": Add host intent successful",
-                                 onfail=ipv4[ 'name' ] +
-                                        ": Add host intent failed" )
+        main.step( "IPV4: Add host intents between h1 and h9" )
+        stepResult = main.wrapper.hostIntent( main,
+                                              name='IPV4',
+                                              host1='h1',
+                                              host2='h9',
+                                              host1Id='00:00:00:00:00:01/-1',
+                                              host2Id='00:00:00:00:00:09/-1',
+                                              sw1='s5',
+                                              sw2='s2',
+                                              expectedLink=18 )
 
-        stepResult = main.TRUE
-        main.step( dualStack1[ 'name' ] + ": Add host intents between " +
-                   dualStack1[ 'host1' ][ 'name' ] + " and " +
-                   dualStack1[ 'host2' ][ 'name' ]  )
-        stepResult = main.wrapper.addHostIntent( main, dualStack1 )
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
-                                 onpass=dualStack1[ 'name' ] +
-                                        ": Add host intent successful",
-                                 onfail=dualStack1[ 'name' ] +
-                                        ": Add host intent failed" )
+                                 onpass="IPV4: Add host intent successful",
+                                 onfail="IPV4: Add host intent failed" )
+        stepResult = main.TRUE
+
+        main.step( "DUALSTACK: Add host intents between h3 and h11" )
+        stepResult = main.wrapper.hostIntent( main,
+                                              name='DUALSTACK',
+                                              host1='h3',
+                                              host2='h11',
+                                              host1Id='00:00:00:00:00:03/-1',
+                                              host2Id='00:00:00:00:00:011/-1',
+                                              sw1='s5',
+                                              sw2='s2',
+                                              expectedLink=18 )
+
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="DUALSTACK: Add host intent successful",
+                                 onfail="DUALSTACK: Add host intent failed" )
 
     def CASE1002( self, main ):
         """
@@ -368,7 +378,7 @@
                  'egressDevice':'of:0000000000000006/1', 'option':
                  { 'ethType':'IPV4', 'ethSrc':'00:00:00:00:00:01',
                    'ethDst':'00:00:00:00:00:09' }, 'link': { 'switch1':'s5',
-                   'switch2':'s2', 'expect':'18' } }
+                 'switch2':'s2', 'expect':'18' } }
 
         """
         ipv4 = { 'name':'IPV4', 'ingressDevice':'of:0000000000000005/1' ,
@@ -376,7 +386,7 @@
                  'egressDevice':'of:0000000000000006/1', 'option':
                  { 'ethType':'IPV4', 'ethSrc':'00:00:00:00:00:01' },
                  'link': { 'switch1':'s5', 'switch2':'s2', 'expect':'18' } }
-        """ 
+        """
         dualStack1 = { 'name':'IPV4', 'ingressDevice':'0000000000000005/3' ,
                        'host1': { 'name': 'h3' }, 'host2': { 'name': 'h11' },
                        'egressDevice':'0000000000000006/3', 'option':
@@ -384,20 +394,37 @@
                        'ethDst':'00:00:00:00:00:0B' }, 'link': { 'switch1':'s5',
                        'switch2':'s2', 'expect':'18' } }
 
-
         main.case( "Add point intents between 2 devices" )
 
         stepResult = main.TRUE
-        main.step( ipv4[ 'name' ] + ": Add point intents between " +
-                   ipv4[ 'host1' ][ 'name' ] + " and " +
-                   ipv4[ 'host2' ][ 'name' ]  )
-        stepResult = main.wrapper.addPointIntent( main, ipv4 )
+        main.step( "IPV4: Add point intents between h1 and h9" )
+        stepResult = main.wrapper.pointIntent(
+                                       main,
+                                       name="IPV4",
+                                       host1="h1",
+                                       host2="h9",
+                                       deviceId1="of:0000000000000005/1",
+                                       deviceId2="of:0000000000000006/1",
+                                       port1="",
+                                       port2="",
+                                       ethType="IPV4",
+                                       mac1="00:00:00:00:00:01",
+                                       mac2="00:00:00:00:00:09",
+                                       bandwidth="",
+                                       lambdaAlloc=False,
+                                       ipProto="",
+                                       ip1="",
+                                       ip2="",
+                                       tcp1="",
+                                       tcp2="",
+                                       sw1="s5",
+                                       sw2="s2",
+                                       expectedLink=18 )
+
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
-                                 onpass=ipv4[ 'name' ] +
-                                        ": Point intent successful",
-                                 onfail=ipv4[ 'name' ] +
-                                        ": Point intent failed" )
+                                 onpass="IPV4: Add point intent successful",
+                                 onfail="IPV4: Add point intent failed" )
 
     def CASE1003( self, main ):
         """
