diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentInstaller.java b/core/api/src/main/java/org/onosproject/net/intent/IntentInstaller.java
index b0877a0..fec85d5 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentInstaller.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentInstaller.java
@@ -15,11 +15,11 @@
  */
 package org.onosproject.net.intent;
 
-import java.util.List;
-import java.util.Set;
-
 import org.onosproject.net.flow.FlowRuleOperation;
 
+import java.util.Collection;
+import java.util.List;
+
 /**
  * Abstraction of entity capable of installing intents to the environment.
  */
@@ -32,7 +32,7 @@
      * @return flow rule operations to complete install
      * @throws IntentException if issues are encountered while installing the intent
      */
-    List<Set<FlowRuleOperation>> install(T intent);
+    List<Collection<FlowRuleOperation>> install(T intent);
 
     /**
      * Uninstalls the specified intent from the environment.
@@ -41,7 +41,7 @@
      * @return flow rule operations to complete uninstall
      * @throws IntentException if issues are encountered while uninstalling the intent
      */
-    List<Set<FlowRuleOperation>> uninstall(T intent);
+    List<Collection<FlowRuleOperation>> uninstall(T intent);
 
     /**
      * Replaces the specified intent with a new one in the environment.
@@ -51,6 +51,6 @@
      * @return flow rule operations to complete the replace
      * @throws IntentException if issues are encountered while uninstalling the intent
      */
-    List<Set<FlowRuleOperation>> replace(T oldIntent, T newIntent);
+    List<Collection<FlowRuleOperation>> replace(T oldIntent, T newIntent);
 
 }
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index e5a1509..c733933 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -15,22 +15,6 @@
  */
 package org.onosproject.net.intent;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-import static org.onosproject.net.intent.IntentEvent.Type.FAILED;
-import static org.onosproject.net.intent.IntentEvent.Type.INSTALLED;
-import static org.onosproject.net.intent.IntentEvent.Type.INSTALL_REQ;
-import static org.onosproject.net.intent.IntentEvent.Type.WITHDRAWN;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -38,6 +22,17 @@
 import org.onosproject.net.flow.FlowRuleOperation;
 import org.onosproject.net.resource.LinkResourceAllocations;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.*;
+import static org.onosproject.net.intent.IntentEvent.Type.*;
+
 /**
  * Suite of tests for the intent service contract.
  */
@@ -319,7 +314,7 @@
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> install(TestInstallableIntent intent) {
+        public List<Collection<FlowRuleOperation>> install(TestInstallableIntent intent) {
             if (fail) {
                 throw new IntentException("install failed by design");
             }
@@ -327,7 +322,7 @@
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> uninstall(TestInstallableIntent intent) {
+        public List<Collection<FlowRuleOperation>> uninstall(TestInstallableIntent intent) {
             if (fail) {
                 throw new IntentException("remove failed by design");
             }
@@ -335,7 +330,7 @@
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> replace(TestInstallableIntent intent,
+        public List<Collection<FlowRuleOperation>> replace(TestInstallableIntent intent,
                                                     TestInstallableIntent newIntent) {
             return null;
         }
