diff --git a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java
index 0a1322e..2d4f915 100644
--- a/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java
+++ b/prism/src/main/java/org/apache/falcon/resource/AbstractExtensionManager.java
@@ -37,10 +37,7 @@
 import org.slf4j.LoggerFactory;
 import javax.ws.rs.core.Response;
 import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
@@ -111,36 +108,27 @@
     }
 
     public ExtensionJobList getExtensionJobs(String extensionName, String sortOrder, String doAsUser) {
-
-        Comparator<ExtensionJobsBean> compareByJobName = new Comparator<ExtensionJobsBean>() {
-            @Override
-            public int compare(ExtensionJobsBean o1, ExtensionJobsBean o2) {
-                return o1.getJobName().compareToIgnoreCase(o2.getJobName());
-            }
-        };
-
-        Map<String, String> jobAndExtensionNames = new HashMap<>();
+        TreeMap<String, String> jobAndExtensionNames = new TreeMap<>();
         List<ExtensionJobsBean> extensionJobs = null;
+
         if (extensionName != null) {
             extensionJobs = ExtensionStore.getMetaStore().getJobsForAnExtension(extensionName);
         } else {
             extensionJobs = ExtensionStore.getMetaStore().getAllExtensionJobs();
         }
 
-        sortOrder = (sortOrder == null) ? ASCENDING_SORT_ORDER : sortOrder;
-        switch (sortOrder.toLowerCase()) {
-        case DESCENDING_SORT_ORDER:
-            Collections.sort(extensionJobs, Collections.reverseOrder(compareByJobName));
-            break;
-
-        default:
-            Collections.sort(extensionJobs, compareByJobName);
-        }
-
         for (ExtensionJobsBean job : extensionJobs) {
             jobAndExtensionNames.put(job.getJobName(), job.getExtensionName());
         }
-        return new ExtensionJobList(extensionJobs.size(), jobAndExtensionNames);
+
+        sortOrder = (sortOrder == null) ? ASCENDING_SORT_ORDER : sortOrder;
+        switch (sortOrder.toLowerCase()) {
+        case DESCENDING_SORT_ORDER:
+            return new ExtensionJobList(extensionJobs.size(), jobAndExtensionNames.descendingMap());
+
+        default:
+            return new ExtensionJobList(extensionJobs.size(), jobAndExtensionNames);
+        }
     }
 
     public APIResult deleteExtensionMetadata(String extensionName) {
