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 ba55097..11c8b76 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
@@ -39,10 +39,8 @@
 import org.slf4j.LoggerFactory;
 
 import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBufferByte;
-import java.awt.image.WritableRaster;
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -97,8 +95,9 @@
     private static final String JAVA_PERMISSIONS = "security.permissions.java-perm";
 
     private static final String OAR = ".oar";
+    private static final String PNG = "png";
     private static final String APP_XML = "app.xml";
-    private static final String ICON_PNG = "icon.png";
+    private static final String APP_PNG = "app.png";
     private static final String M2_PREFIX = "m2";
 
     private static final String ROOT = "../";
@@ -197,7 +196,7 @@
             ApplicationDescription desc = plainXml ?
                     parsePlainAppDescription(bis) : parseZippedAppDescription(bis);
             checkState(!appFile(desc.name(), APP_XML).exists(),
-                       "Application %s already installed", desc.name());
+                    "Application %s already installed", desc.name());
 
             if (plainXml) {
                 expandPlainApplication(cache, desc);
@@ -412,6 +411,11 @@
         return new File(new File(appsDir, appName), fileName);
     }
 
+    // Returns the icon file located under the specified app directory.
+    private File iconFile(String appName, String fileName) {
+        return new File(new File(appsDir, appName), fileName);
+    }
+
     // Returns the set of Permissions specified in the app.xml file
     private ImmutableSet<Permission> getPermissions(XMLConfiguration cfg) {
         List<Permission> permissionList = Lists.newArrayList();
@@ -441,29 +445,25 @@
 
     // Returns the byte stream from icon.png file in oar application archive.
     private byte[] getApplicationIcon(String appName) {
-        // open image
-        File iconFile = appFile(appName, ICON_PNG);
+
+        byte[] icon = new byte[0];
+        File iconFile = iconFile(appName, APP_PNG);
 
         if (!iconFile.exists()) {
-            iconFile = new File(appsDir, ICON_PNG);
+            // assume that we can always fallback to default icon
+            iconFile = new File(appsDir, APP_PNG);
         }
 
-        if (!iconFile.exists()) {
-            return null;
-        }
-
-        BufferedImage bufferedImage = null;
         try {
-            bufferedImage = ImageIO.read(iconFile);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            ImageIO.write(ImageIO.read(iconFile), PNG, bos);
+            icon = bos.toByteArray();
+            bos.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
 
-        // get DataBufferBytes from Raster
-        WritableRaster raster = bufferedImage .getRaster();
-        DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
-
-        return data.getData();
+        return icon;
     }
 
     // Returns application role type
