diff --git a/TestON/tests/FUNCoptical/FUNCoptical.params b/TestON/tests/FUNCoptical/FUNCoptical.params
index 2d8df50..3735af0 100644
--- a/TestON/tests/FUNCoptical/FUNCoptical.params
+++ b/TestON/tests/FUNCoptical/FUNCoptical.params
@@ -4,16 +4,17 @@
     # 2 - Install ONOS
     # 10 - Start Mininet opticalTest Topology
     # 14 - Stop Mininet
+    # 17 - Activate Flow Objectives
     # 21 - Run pingall to discover all hosts
     # 22 - Send arpings to discover all hosts
     # 23 - Compare ONOS Topology to Mininet Topology
     # 31 - Add and test bidirectional point intents
     # 32 - Add and test bidirectional host intents
 
-    <testcases>1,2,10,21,22,23,31,32,14,2,10,21,22,23,31,32,14</testcases>
+    <testcases>1,[2,10,21,22,23,31,32,14,2,10,21,22,23,31,32,14]*1,[2,10,17,21,22,23,31,32,14,2,10,17,21,22,23,31,32,14]*1</testcases>
 
     <SCALE>
-        <size>1,3</size>
+        <size>1,3,1,3</size>
     </SCALE>
 
     <DEPENDENCY>
diff --git a/TestON/tests/FUNCoptical/FUNCoptical.py b/TestON/tests/FUNCoptical/FUNCoptical.py
index 3ab0df4..2d71cc2 100644
--- a/TestON/tests/FUNCoptical/FUNCoptical.py
+++ b/TestON/tests/FUNCoptical/FUNCoptical.py
@@ -126,6 +126,7 @@
 
         # main.scale[ 0 ] determines the current number of ONOS controller
         main.numCtrls = int( main.scale[ 0 ] )
+        main.flowCompiler = "Flow Rules"
 
         main.case( "Starting up " + str( main.numCtrls ) +
                    " node(s) ONOS cluster" )
@@ -261,7 +262,7 @@
             main.cleanup()
             main.exit()
 
-    
+
 
 
     def CASE14( self, main ):
@@ -284,6 +285,25 @@
             main.cleanup()
             main.exit()
 
+    def CASE17( self, main ):
+        """
+            Use Flow Objectives
+        """
+        main.case( "Enable intent compilation using Flow Objectives" )
+        main.step( "Enabling Flow Objectives" )
+
+        main.flowCompiler = "Flow Objectives"
+
+        cmd = "org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator"
+
+        stepResult = main.CLIs[ 0 ].setCfg( component=cmd,
+                                            propName="useFlowObjectives", value="true" )
+
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="Successfully activated Flow Objectives",
+                                 onfail="Failed to activate Flow Objectives" )
+
     def CASE21( self,main ):
         """
             Run pingall to discover all hosts
@@ -383,7 +403,7 @@
                             currentDevicesResult = main.TRUE
                         else:
                             currentDevicesResult = main.FALSE
-                            main.log.error( "Node {} only sees {} device(s) but {} exist".format( 
+                            main.log.error( "Node {} only sees {} device(s) but {} exist".format(
                                 controllerStr,len( deviceData ),mnSwitches ) )
                 else:
                     currentDevicesResult = main.FALSE
@@ -402,7 +422,7 @@
                             currentLinksResult = main.TRUE
                         else:
                             currentLinksResult = main.FALSE
-                            main.log.error( "Node {} only sees {} link(s) but {} exist".format( 
+                            main.log.error( "Node {} only sees {} link(s) but {} exist".format(
                                 controllerStr,len( linkData ),mnLinks ) )
                 else:
                     currentLinksResult = main.FALSE
@@ -421,7 +441,7 @@
                             currentHostsResult = main.TRUE
                         else:
                             currentHostsResult = main.FALSE
-                            main.log.error( "Node {} only sees {} host(s) but {} exist".format( 
+                            main.log.error( "Node {} only sees {} host(s) but {} exist".format(
                                 controllerStr,len( hostData ),mnHosts ) )
                 else:
                     currentHostsResult = main.FALSE
@@ -494,7 +514,7 @@
         main.log.info( "Checking intents state one more time")
         checkStateResult = main.CLIs[ 0 ].checkIntentState(
                                                   intentsId = main.pIntentsId )
-        
+
         if checkStateResult and checkFlowResult:
             addIntentsResult = main.TRUE
         else:
@@ -547,7 +567,7 @@
         main.log.info( "Checking intents state" )
         intentResult = main.CLIs[ 0 ].checkIntentState( intentsId = intentsId )
         # Check intent state again if intents are not in installed state
-        
+
 
         # If intent state is wrong, wait 3 sec and try again
         if not intentResult:
@@ -557,7 +577,7 @@
         # If intent state is still wrong, display intent states
         if not intentResult:
             main.log.error( main.CLIs[ 0 ].intents() )
-        
+
         utilities.assert_equals( expect=main.TRUE,
                                  actual=intentResult,
                                  onpass="All intents are in INSTALLED state ",
@@ -572,7 +592,7 @@
             pingResult = main.TRUE
             pingResult = main.LincOE.pingHostOptical( src="h1", target="h2" ) \
                 and main.LincOE.pingHostOptical( src="h2",target="h1" )
-            
+
             utilities.assert_equals( expect=main.TRUE,
                                      actual=pingResult,
                                      onpass="Pinged successfully between h1 and h2",
@@ -585,16 +605,24 @@
         intentsJson = json.loads( main.CLIs[ 0 ].intents() )
         main.CLIs[ 0 ].removeIntent( intentId=intent1, purge=True )
         #main.CLIs[ 0 ].removeIntent( intentId=intent2, purge=True )
+        main.log.debug(intentsJson)
         for intents in intentsJson:
-            main.CLIs[ 0 ].removeIntent( intentId=intents.get( 'id' ),
-                                     app='org.onosproject.optical',
-                                     purge=True )
-        # Check if any intents could not be removed
-        if len( json.loads( main.CLIs[ 0 ].intents() ) ):
-            print json.loads( main.CLIs[ 0 ].intents() )
-            removeResult = main.FALSE
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=removeResult,
-                                 onpass="Successfully removed host intents",
-                                 onfail="Failed to remove host intents" )
+            try:
+                main.CLIs[ 0 ].removeIntent( intentId=intents.get( 'id' ),
+                                             app='org.onosproject.optical',
+                                             purge=True )
+            except TypeError:
+                main.log.error( "Cannot see intents on Node " + str( main.CLIs[ 0 ] ) +\
+                                ".  Removing all intents.")
+                main.CLIs[ 0 ].removeAllIntents( purge=True )
+                main.CLIs[ 0 ].removeAllIntents( purge=True, app='org.onosproject.optical')
 
+        # Check if any intents could not be removed
+        for i in range( main.numCtrls ):
+            if len( json.loads( main.CLIs[ i ].intents() ) ):
+                print json.loads( main.CLIs[ i ].intents() )
+                removeResult = main.FALSE
+            utilities.assert_equals( expect=main.TRUE,
+                                     actual=removeResult,
+                                     onpass="Successfully removed host intents",
+                                     onfail="Failed to remove host intents" )
