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 b45035e..7f09872 100644
--- a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
@@ -37,7 +37,7 @@
 
     public static final String APP_NAME = "org.foo.app";
     public static final Version VER = Version.version(1, 2, "a", null);
-    public static final String DESC = "Awesome application from Circus";
+    public static final String DESC = "Awesome application from Circus, Inc.";
     public static final String ORIGIN = "Circus";
     public static final ApplicationRole ROLE = ApplicationRole.ADMIN;
     public static final Set<Permission> PERMS = ImmutableSet.of(Permission.FLOWRULE_WRITE, Permission.FLOWRULE_READ);
diff --git a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
index bdf1399..78fd0b9 100644
--- a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
+++ b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
@@ -150,7 +150,11 @@
      */
     public ApplicationDescription getApplicationDescription(String appName) {
         try {
-            return loadAppDescription(new XMLConfiguration(appFile(appName, APP_XML)));
+            XMLConfiguration cfg = new XMLConfiguration();
+            cfg.setAttributeSplittingDisabled(true);
+            cfg.setDelimiterParsingDisabled(true);
+            cfg.load(appFile(appName, APP_XML));
+            return loadAppDescription(cfg);
         } catch (Exception e) {
             throw new ApplicationException("Unable to get app description", e);
         }
@@ -258,6 +262,8 @@
     private ApplicationDescription parsePlainAppDescription(InputStream stream)
             throws IOException {
         XMLConfiguration cfg = new XMLConfiguration();
+        cfg.setAttributeSplittingDisabled(true);
+        cfg.setDelimiterParsingDisabled(true);
         try {
             cfg.load(stream);
             return loadAppDescription(cfg);
@@ -267,8 +273,6 @@
     }
 
     private ApplicationDescription loadAppDescription(XMLConfiguration cfg) {
-        cfg.setAttributeSplittingDisabled(true);
-        cfg.setDelimiterParsingDisabled(true);
         String name = cfg.getString(NAME);
         Version version = Version.version(cfg.getString(VERSION));
         String desc = cfg.getString(DESCRIPTION);
@@ -277,7 +281,7 @@
         Set<Permission> perms = getPermissions(cfg);
         String featRepo = cfg.getString(FEATURES_REPO);
         URI featuresRepo = featRepo != null ? URI.create(featRepo) : null;
-        List<String> features = ImmutableList.copyOf(cfg.getStringArray(FEATURES));
+        List<String> features = ImmutableList.copyOf(cfg.getString(FEATURES).split(","));
 
         return new DefaultApplicationDescription(name, version, desc, origin, role,
                                                  perms, featuresRepo, features);
diff --git a/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java b/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
index 9472f5a..2682e86 100644
--- a/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
+++ b/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
@@ -33,6 +33,9 @@
 import static org.junit.Assert.*;
 import static org.onosproject.app.DefaultApplicationDescriptionTest.*;
 
+/**
+ * Suite of tests for the application archive utility.
+ */
 public class ApplicationArchiveTest {
 
     static final String ROOT = "/tmp/app-junit/";
