diff --git a/app.js b/app.js
index 020dcfdda52da48aef450d34398305db4e2501b2..be359d721abbcc7330cc524fbe5fef5e61095157 100644
--- a/app.js
+++ b/app.js
@@ -84,7 +84,7 @@ var firmwarewizard = function() {
 
   // constants
   var IGNORED_ELEMENTS = [
-    './', '../', 'experimental.manifest', 'beta.manifest', 'stable.manifest',
+    './', '../', '.manifest',
     '-tftp', '-fat', '-loader', '-NA', '-x2-', '-hsv2', '-p1020'
   ];
   var PANE = {'MODEL': 0, 'IMAGETYPE': 1, 'BRANCH': 2};
@@ -114,6 +114,10 @@ var firmwarewizard = function() {
     'kernel': "Kernel-Image"
   };
 
+  var branches = ObjectValues(config.directories).filter(function(e, index, self) {
+    return index === self.indexOf(e);
+  });
+
   var reFileExtension = new RegExp(/.(bin|img.gz|img|tar)/);
   var reRemoveDashes = new RegExp(/-/g);
   var reSearchable = new RegExp('[-/ '+NON_BREAKING_SPACE+']', 'g');
@@ -800,16 +804,16 @@ var firmwarewizard = function() {
         return;
       }
 
-      var revisions = images[currentVendor][currentModel]
-        .filter(function(e) {
-          return e.revision == currentRevision && e.type == currentImageType;
-        }).sort(function(a, b) {
-          if (a.branch == 'stable') return -1;
-          if (b.branch == 'stable') return 1;
-          if (a.branch == 'beta') return -1;
-          if (b.branch == 'beta') return 1;
-          return 0;
-        });
+      var revisions = images[currentVendor][currentModel].filter(function(e) {
+        return e.revision == currentRevision && e.type == currentImageType;
+      }).sort(function(a, b) {
+        // non-experimental branches should appear first
+        var a_experimental = config.experimental_branches.indexOf(a.branch) != -1;
+        var b_experimental = config.experimental_branches.indexOf(b.branch) != -1;
+        if (a_experimental && !b_experimental) return 1;
+        if (!a_experimental && b_experimental) return -1;
+        return branches.indexOf(a.branch) > branches.indexOf(b.branch);
+      });
 
       $('#branchselect').innerHTML = '';
       $('#branch-experimental-dl').innerHTML = '';
@@ -828,7 +832,7 @@ var firmwarewizard = function() {
                       (rev.size!==''?' ['+rev.size+']':'') +
                       ' (' +prettyPrintVersion(rev.version)+')';
 
-        if (rev.branch == 'experimental') {
+        if (config.experimental_branches.indexOf(rev.branch) != -1) {
           if($('#branchselect .dl-experimental') === null) {
             var button = document.createElement('button');
             button.className = 'btn dl-experimental';
@@ -873,9 +877,6 @@ var firmwarewizard = function() {
     updatePanes(s.vendor, s.model, s.revision, s.imageType);
 
     function updateCurrentVersions() {
-      var branches = ObjectValues(config.directories)
-        .filter(function(value, index, self) { return self.indexOf(value) === index; });
-
       $('#currentVersions').innerText = '';
       if (config.changelog !== undefined) {
         var a = document.createElement('a');
diff --git a/config_template.js b/config_template.js
index 01f2360f92bf4393d3560b03e614b77c78a44080..89396b419d34eb983a2aac20735170b386b73acc 100644
--- a/config_template.js
+++ b/config_template.js
@@ -28,6 +28,8 @@ var config = {
     './images/gluon-factory-example.html': 'stable',
     './images/gluon-sysupgrade-example.html': 'stable'
   },
+  // experimental branches (show a warning for these branches)
+  experimental_branches: ['experimental'],
   // path to preview pictures directory
   preview_pictures: 'pictures/',
   // link to changelog