diff --git a/app.css b/app.css
index c37eab282742529ce591e61cda96c9401a08b514..2064455bf919c87ed36736ced12b196988aa67e8 100644
--- a/app.css
+++ b/app.css
@@ -110,16 +110,30 @@ h1, h2, h3, h4, h5, h6 {
   color: #dc0067;
 }
 
-.firmwareTableLink {
+.firmwareTableLink, .notRecommendedLink, .InfoLink {
+  clear: right;
   float:right;
   color: #337ab7;
   cursor: pointer;
 }
 
-.firmwareTableLink:hover {
+.notRecommendedLink {
+  display: none;
+}
+
+.firmwareTableLink:hover, .notRecommendedLink:hover {
   text-decoration: underline;
 }
 
+.notRecommendedLabel {
+  color: #337ab7;
+}
+
+#wizard #model-pane .notRecommendedCheckbox {
+  width:auto;
+  display: inline;
+}
+
 #wizard .pane-wrapper {
   box-shadow: 0 0.15em 0.5em #ccc;
   margin: 1em 0 3em 0;
@@ -180,7 +194,8 @@ h1, h2, h3, h4, h5, h6 {
   box-shadow: 0 0 0.5em #005ea0 inset;
 }
 
-#wizard #branch-pane .warning-experimental {
+#wizard #branch-pane .warning-experimental,
+#wizard #model-pane .warning-notrecommended {
   display: none;
   margin: 1em 0;
   padding: 1em;
@@ -188,7 +203,8 @@ h1, h2, h3, h4, h5, h6 {
   border: .5em solid #009ee0;
 }
 
-#wizard #branch-pane.show-experimental-warning .warning-experimental {
+#wizard #branch-pane.show-experimental-warning .warning-experimental,
+#wizard #model-pane.show-notrecommended-warning .warning-notrecommended {
   display: block;
 }
 
diff --git a/app.js b/app.js
index af628b61321e9ac2056844a4ecb5d4028a2b8124..b779b1fd9821c52dc6107373f7d247b2101aa5d2 100644
--- a/app.js
+++ b/app.js
@@ -104,7 +104,8 @@ var firmwarewizard = function() {
 
   var wizard = parseWizardObject();
   app.currentVersions = {};
-  var images = {};
+  var availableImages = {};
+  var images = availableImages;
   var vendormodels_reverse;
 
   var typeNames = {
@@ -145,6 +146,14 @@ var firmwarewizard = function() {
   if ("enabled_device_categories" in config) {
     enabled_device_categories = config.enabled_device_categories;
   }
+  if (config.recommended_toggle) {
+    enabled_device_categories = ['recommended'];
+    show_inline('.notRecommendedLink');
+
+    if (config.recommended_info_link) {
+      $('#notrecommendedinfo').innerHTML = '<p><a href="' + config.recommended_info_link + '" target="_new">Mehr Informationen</a>';
+    }
+  }
 
   function buildVendorModelsReverse() {
     var vendormodels_reverse = {};
@@ -188,6 +197,21 @@ var firmwarewizard = function() {
     return wizard;
   }
 
+  function setFilteredImages() {
+    images = {};
+    for (var vendor in availableImages) {
+      images[vendor] = {};
+      for (var model in availableImages[vendor]) {
+        for (var device in availableImages[vendor][model]) {
+          console.log(availableImages[vendor][model][device].category)
+          if (enabled_device_categories.indexOf(availableImages[vendor][model][device].category) > -1) {
+            addArray(images[vendor], model, availableImages[vendor][model][device]);
+          }
+        }
+      }
+    }
+  }
+
   window.onpopstate = function(event) {
     if (event.state === null) return;
     wizard = parseWizardObject(event.state);
@@ -231,6 +255,10 @@ var firmwarewizard = function() {
       scrollDown();
     });
 
+    $('#wizard .notRecommendedLink').addEventListener('click', function(e) {
+      toggleClass($('#model-pane'), 'show-notrecommended-warning');
+    });
+
     $('#wizard .firmwareTableLink').addEventListener('click', function(e) {
       firmwarewizard.showFirmwareTable();
     });
@@ -239,6 +267,17 @@ var firmwarewizard = function() {
       firmwarewizard.hideFirmwareTable();
     });
 
+    $('#notrecommendedselect').addEventListener('change', function(e) {
+      if (this.checked) {
+        enabled_device_categories = config.enabled_device_categories;
+      } else if ("enabled_device_categories" in config) {
+        enabled_device_categories = ['recommended'];
+      }
+      setFilteredImages();
+      updateHTML(wizard);
+      updateFirmwareTable();
+    });
+
     vendormodels_reverse = buildVendorModelsReverse();
 
     loadDirectories(function() {
@@ -251,7 +290,7 @@ var firmwarewizard = function() {
         var model = fullModelList[m][MODEL_MODEL];
         previews.appendChild(createPicturePreview(vendor, model, searchstring));
       }
-
+      setFilteredImages();
       updateHTML(wizard);
       show_block('.manualSelection');
       updateFirmwareTable();
@@ -370,11 +409,6 @@ var firmwarewizard = function() {
       return;
     }
 
-    if (enabled_device_categories.indexOf(device.category) == -1) {
-      // the category is not in the list of enabled categories
-      return;
-    }
-
     var strippedFilename = filename;
     strippedFilename = strippedFilename.replace(config.community_prefix, '-');
 
@@ -450,18 +484,19 @@ var firmwarewizard = function() {
     // collect branch versions
     app.currentVersions[branch] = version;
 
-    if (!(device.vendor in images)) {
-      images[device.vendor] = {};
+    if (!(device.vendor in availableImages)) {
+      availableImages[device.vendor] = {};
     }
 
-    addArray(images[device.vendor], device.model, {
+    addArray(availableImages[device.vendor], device.model, {
       'revision': revision,
       'branch': branch,
       'type': type,
       'version': version,
       'location': location,
       'size': size,
-      'preview': preview+".jpg"
+      'preview': preview+".jpg",
+      'category': device.category
     });
   }
 
@@ -674,7 +709,7 @@ var firmwarewizard = function() {
       var model = modelList[f][MODEL_MODEL];
 
       for(p = 0; p < previews.length; p++) {
-        if (previews[p].getAttribute('data-searchstring') == searchstring) {
+        if (previews[p].getAttribute('data-model') == model) {
           previews[p].style.display = 'inline-block';
           if (modelList.length == 1) {
             setClass(previews[p], 'selected', true);
diff --git a/config_template.js b/config_template.js
index 6aae107644ace28daac45f0fd83ca6fe2eb074ad..b4e351beab6e18eb06acd9ef5dca355a72df74f7 100644
--- a/config_template.js
+++ b/config_template.js
@@ -20,6 +20,12 @@ var config = {
   vendormodels: vendormodels,
   // set enabled categories of devices (see devices.js)
   enabled_device_categories: ["recommended"],
+  // Display a checkbox that allows to display not recommended devices.
+  // This only make sense if enabled_device_categories also contains not
+  // recommended devices.
+  recommended_toggle: false,
+  // Optional link to an info page about no longer recommended devices
+  recommended_info_link: null,
   // community prefix of the firmware images
   community_prefix: 'gluon-ffda-',
   // firmware version regex
diff --git a/index.html b/index.html
index 674d253c40242d8b05fad7cd7e399b860023d588..a622e78f4b72f979e99e19d1076846a426b5631d 100644
--- a/index.html
+++ b/index.html
@@ -18,8 +18,24 @@
       <img src="./router.png" >
       <div class="pane-wrapper">
         <div id="model-pane" class="pane">
+          <span class="notRecommendedLink">Veraltete Geräte anzeigen</span>
           <span class="firmwareTableLink">Tabelle anzeigen</span>
           <h1>Schritt 1: Wähle Dein Routermodell</h1>
+          <div class="warning-notrecommended">
+            <p>
+              <b>Vorsicht!</b> Nicht ohne Grund siehst Du in der Voreinstellung
+              nur die von uns empfohlenen Geräte, denn nur mit diesen ist ein reibungsloser
+              Freifunk-Betrieb gewährleistet.
+            </p>
+            <p>
+              Du solltest dich aber im vorraus Informieren, bevor du
+              veraltete Geräte verwendest, um selbst abzuwägen, ob Du wirklich alle
+              Nachteile in Kauf nehmen willst.
+            </p>
+            <div id="notrecommendedinfo"></div>
+            <input type="checkbox" id="notrecommendedselect" class="notRecommendedCheckbox" value="notRecommended" />
+            <label class="notRecommendedLabel" for="notrecommendedselect">Veraltete Geräte trotzdem anzeigen</label>
+          </div>
           <p>Erst mit der Freifunk-Firmware wird dein Router zu einem Teil des
              Freifunk-Netzes. Sie ist fertig vorkonfiguriert, um Kontakt mit
              benachbarten Freifunk-Knoten aufzunehmen, ein offenes und ohne