diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
index ec7958d..64f04a6 100644
--- a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
@@ -19,6 +19,7 @@
 import org.onosproject.core.Version;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -71,10 +72,10 @@
     Optional<URI> featuresRepo();
 
     /**
-     * Returns the set of features comprising the application. At least one
+     * Returns the list of features comprising the application. At least one
      * feature must be given.
      *
      * @return application features
      */
-    Set<String> features();
+    List<String> features();
 }
diff --git a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
index 9c53542..78b902b 100644
--- a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
@@ -19,6 +19,7 @@
 import org.onosproject.core.Version;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -37,7 +38,7 @@
     private final String origin;
     private final Set<Permission> permissions;
     private final Optional<URI> featuresRepo;
-    private final Set<String> features;
+    private final List<String> features;
 
     /**
      * Creates a new application descriptor using the supplied data.
@@ -53,7 +54,7 @@
     public DefaultApplicationDescription(String name, Version version,
                                          String description, String origin,
                                          Set<Permission> permissions,
-                                         URI featuresRepo, Set<String> features) {
+                                         URI featuresRepo, List<String> features) {
         this.name = checkNotNull(name, "Name cannot be null");
         this.version = checkNotNull(version, "Version cannot be null");
         this.description = checkNotNull(description, "Description cannot be null");
@@ -95,7 +96,7 @@
     }
 
     @Override
-    public Set<String> features() {
+    public List<String> features() {
         return features;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/core/Application.java b/core/api/src/main/java/org/onosproject/core/Application.java
index d876a67..da2be13 100644
--- a/core/api/src/main/java/org/onosproject/core/Application.java
+++ b/core/api/src/main/java/org/onosproject/core/Application.java
@@ -16,6 +16,7 @@
 package org.onosproject.core;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -68,10 +69,10 @@
     Optional<URI> featuresRepo();
 
     /**
-     * Returns the set of features comprising the application. At least one
+     * Returns the list of features comprising the application. At least one
      * feature must be given.
      *
      * @return application features
      */
-    Set<String> features();
+    List<String> features();
 }
diff --git a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
index 4da85a5..b765e70 100644
--- a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
+++ b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
@@ -16,6 +16,7 @@
 package org.onosproject.core;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -35,7 +36,7 @@
     private final String origin;
     private final Set<Permission> permissions;
     private final Optional<URI> featuresRepo;
-    private final Set<String> features;
+    private final List<String> features;
 
     /**
      * Creates a new application descriptor using the supplied data.
@@ -51,7 +52,7 @@
     public DefaultApplication(ApplicationId appId, Version version,
                               String description, String origin,
                               Set<Permission> permissions,
-                              Optional<URI> featuresRepo, Set<String> features) {
+                              Optional<URI> featuresRepo, List<String> features) {
         this.appId = checkNotNull(appId, "ID cannot be null");
         this.version = checkNotNull(version, "Version cannot be null");
         this.description = checkNotNull(description, "Description cannot be null");
@@ -93,7 +94,7 @@
     }
 
     @Override
-    public Set<String> features() {
+    public List<String> features() {
         return features;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
index 7079427..3c33a7f 100644
--- a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
@@ -15,12 +15,14 @@
  */
 package org.onosproject.app;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.junit.Test;
 import org.onosproject.core.Permission;
 import org.onosproject.core.Version;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
@@ -37,7 +39,7 @@
     public static final String ORIGIN = "Circus";
     public static final Set<Permission> PERMS = ImmutableSet.of();
     public static final URI FURL = URI.create("mvn:org.foo-features/1.2a/xml/features");
-    public static final Set<String> FEATURES = ImmutableSet.of("foo");
+    public static final List<String> FEATURES = ImmutableList.of("foo", "bar");
 
     @Test
     public void basics() {
