diff --git a/examples/selectAudioDevice.js b/examples/selectAudioDevice.js
index 23606f774c..a90f3da4cf 100644
--- a/examples/selectAudioDevice.js
+++ b/examples/selectAudioDevice.js
@@ -41,6 +41,9 @@ if (typeof String.prototype.trimEndsWith != 'function') {
     };
 }
 
+const INPUT_DEVICE_SETTING = "audio_input_device";
+const OUTPUT_DEVICE_SETTING = "audio_output_device";
+
 var selectedInputMenu = "";
 var selectedOutputMenu = "";
 
@@ -48,9 +51,14 @@ function setupAudioMenus() {
     Menu.addMenu("Tools > Audio");
     Menu.addSeparator("Tools > Audio","Output Audio Device");
 
+    var outputDeviceSetting = Settings.getValue(OUTPUT_DEVICE_SETTING);
     var outputDevices = AudioDevice.getOutputDevices();
     var selectedOutputDevice = AudioDevice.getOutputDevice();
-
+    if (outputDevices.indexOf(outputDeviceSetting) != -1 && selectedOutputDevice != outputDeviceSetting) {
+        if (AudioDevice.setOutputDevice(outputDeviceSetting)) {
+            selectedOutputDevice = outputDeviceSetting;
+        }
+    }
     for(var i = 0; i < outputDevices.length; i++) {
         var thisDeviceSelected = (outputDevices[i] == selectedOutputDevice);
         var menuItem = "Use " + outputDevices[i] + " for Output";
@@ -67,9 +75,14 @@ function setupAudioMenus() {
 
     Menu.addSeparator("Tools > Audio","Input Audio Device");
 
+    var inputDeviceSetting = Settings.getValue(INPUT_DEVICE_SETTING);
     var inputDevices = AudioDevice.getInputDevices();
     var selectedInputDevice = AudioDevice.getInputDevice();
-
+    if (inputDevices.indexOf(inputDeviceSetting) != -1 && selectedInputDevice != inputDeviceSetting) {
+        if (AudioDevice.setInputDevice(inputDeviceSetting)) {
+            selectedInputDevice = inputDeviceSetting;
+        }
+    }
     for(var i = 0; i < inputDevices.length; i++) {
         var thisDeviceSelected = (inputDevices[i] == selectedInputDevice);
         var menuItem = "Use " + inputDevices[i] + " for Input";
@@ -85,7 +98,8 @@ function setupAudioMenus() {
     }
 }
 
-setupAudioMenus();
+// Have a small delay before the menu's get setup and the audio devices can switch to the last selected ones
+Script.setTimeout(function() { setupAudioMenus(); }, 5000);
 
 function scriptEnding() {
     Menu.removeMenu("Tools > Audio");
@@ -101,15 +115,18 @@ function menuItemEvent(menuItem) {
             Menu.setIsOptionChecked(selectedOutputMenu, false);
             selectedOutputMenu = menuItem;
             Menu.setIsOptionChecked(selectedOutputMenu, true);
-            AudioDevice.setOutputDevice(selectedDevice);
-            
+            if (AudioDevice.setOutputDevice(selectedDevice)) {
+                Settings.setValue(OUTPUT_DEVICE_SETTING, selectedDevice);
+            }
         } else if (menuItem.endsWith(" for Input")) {
             var selectedDevice = menuItem.trimStartsWith("Use ").trimEndsWith(" for Input");
             print("input audio selection..." + selectedDevice);
             Menu.setIsOptionChecked(selectedInputMenu, false);
             selectedInputMenu = menuItem;
             Menu.setIsOptionChecked(selectedInputMenu, true);
-            AudioDevice.setInputDevice(selectedDevice);
+            if (AudioDevice.setInputDevice(selectedDevice)) {
+                Settings.setValue(INPUT_DEVICE_SETTING, selectedDevice);
+            }
         }
     }
 }