diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
index 515f2ee..0f08d38 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
@@ -42,6 +42,6 @@
     <MININET>
         <switch>6</switch>
     </MININET>
-    <RETRY>10</RETRY>
+    <RETRY>30</RETRY>
     <RetrySleep>2</RetrySleep>
 </PARAMS>
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
index f09aec5..4895b3b 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
@@ -47,7 +47,7 @@
             main.nodes = []
             main.ONOSip = []
             main.retrytimes = int( main.params[ 'RETRY' ] )
-            main.retrysleep = main.params[ 'RetrySleep' ]
+            main.retrysleep = int( main.params[ 'RetrySleep' ] )
             main.ONOSip = main.ONOSbench.getOnosIps()
 
             # Assigning ONOS cli handles to a list
@@ -402,6 +402,8 @@
         main.caseExplanation = "Add Network Configurations for devices" +\
                                " not discovered yet. One device is allowed" +\
                                ", the other disallowed."
+
+
         pprint = main.nodes[ 0 ].pprint
 
         main.step( "Add Net Cfg for switch1" )
@@ -595,7 +597,6 @@
                                  actual=s2Result,
                                  onpass="Net Cfg added for device s2",
                                  onfail="Net Cfg for device s2 not correctly set" )
-
         main.step( "Add Net Cfg for switch4" )
 
         try:
@@ -636,6 +637,7 @@
                                  actual=s4Result,
                                  onpass="Net Cfg added for device s4",
                                  onfail="Net Cfg for device s4 not correctly set" )
+
         main.netCfg.compareCfg( main, main.gossipTime )
 
     def CASE23( self, main ):
@@ -674,38 +676,18 @@
                                  onfail=failMsg )
 
         main.step( "Check device annotations" )
-        keys = [ 'name', 'owner', 'rackAddress' ]
-        try:
-            for sw in json.loads( devices ):
-                if "of:0000000000000001" in sw.get( 'id' ):
-                    s1Correct = True
-                    for k in keys:
-                        if str( sw.get( 'annotations', {} ).get( k ) ) != str( main.s1Json[ k ] ):
-                            s1Correct = False
-                            main.log.debug( "{} is wrong on s1".format( k ) )
-                    if not s1Correct:
-                        main.log.error( "Annotations for s1 are incorrect: {}".format( sw ) )
-                elif "of:0000000000000002" in sw[ 'id' ]:
-                    s2Correct = True
-                    for k in keys:
-                        if str( sw.get( 'annotations', {} ).get( k ) ) != str( main.s2Json[ k ] ):
-                            s2Correct = False
-                            main.log.debug( "{} is wrong on s2".format( k ) )
-                    if not s2Correct:
-                        main.log.error( "Annotations for s2 are incorrect: {}".format( sw ) )
-        except( TypeError, ValueError ):
-            main.log.error( "Problem loading devices" )
-            stepResult = False
-        try:
-            stepResult = s1Correct and s2Correct
-        except NameError:
-            stepResult = False
-            main.log.error( "s1 and/or s2 not found in devices" )
+        stepResult = utilities.retry( f=main.netCfg.checkAllDeviceAnnotations,
+                                      args=( main, json ),
+                                      retValue=False,
+                                      attempts=main.retrytimes,
+                                      sleep=main.retrysleep )
         utilities.assert_equals( expect=True,
                                  actual=stepResult,
-                                 onpass="Configured device's annotations are correct",
+                                 onpass="Configured devices' annotations are correct",
                                  onfail="Incorrect annotations for configured devices." )
 
+
+
     def CASE24( self, main ):
         """
         Testing removal of configurations
diff --git a/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py b/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py
index 62de12a..b2e4f56 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py
+++ b/TestON/tests/FUNC/FUNCnetCfg/dependencies/netCfg.py
@@ -44,3 +44,34 @@
         for i in responses:
             main.log.debug( i )
     return False
+
+def checkDeviceAnnotations( main, jsonObj, sw ):
+    id = str( sw.get( 'id' ) )
+    keys = [ 'name', 'owner', 'rackAddress' ]
+    correct = True
+    for k in keys:
+        if str( sw.get( 'annotations', {} ).get( k ) ) != str( jsonObj[ k ] ) :
+            correct = False
+            main.log.debug( "{} is wrong on switch: ".format( k ) + id )
+    if not correct:
+        main.log.error( "Annotations for switch " + id  + " are incorrect: {}".format( sw ) )
+    return correct
+
+
+def checkAllDeviceAnnotations( main, json ):
+    devices = main.ONOSrest1.devices( )
+    id = "of:0000000000000001"
+    i = 1
+    result = [ ]
+    try:
+        for sw in json.loads( devices ):
+            if id in sw.get( 'id' ):
+                jsonObj = getattr( main, "s" + str( i ) + "Json" )
+                isDeviceAnnotationCorrect = checkDeviceAnnotations( main, jsonObj, sw )
+                result.append( isDeviceAnnotationCorrect )
+                i += 1
+                id = "of:000000000000000" + str( i )
+    except( TypeError, ValueError ):
+        main.log.error( "Problem loading device" )
+        return False
+    return all( result )
