diff --git a/default_device.cpp b/default_device.cpp
index ed601f6..d7dd452 100644
--- a/default_device.cpp
+++ b/default_device.cpp
@@ -14,80 +14,36 @@
  * limitations under the License.
  */
 
-#include <linux/input.h>
-
-#include "common.h"
 #include "device.h"
 #include "screen_ui.h"
 
-static const char* HEADERS[] = {
-    "Volume up/down to move highlight.",
-    "Power button to select.",
-    "",
-    NULL
-};
-
-static const char* ITEMS[] = {
-    "Reboot system now",
-    "Reboot to bootloader",
-    "Apply update from ADB",
-    "Apply update from SD card",
-    "Wipe data/factory reset",
-    "Wipe cache partition",
-    "View recovery logs",
-    "Power off",
-    NULL
-};
-
 class DefaultDevice : public Device {
-  public:
-    DefaultDevice() :
-        ui(new ScreenRecoveryUI) {
+ public:
+  DefaultDevice() : Device(new ScreenRecoveryUI) {
+  }
+
+  // TODO: make this handle more cases, and move the default implementation into Device too.
+  int HandleMenuKey(int key, int visible) {
+    if (visible) {
+      switch (key) {
+        case KEY_DOWN:
+        case KEY_VOLUMEDOWN:
+          return kHighlightDown;
+
+        case KEY_UP:
+        case KEY_VOLUMEUP:
+          return kHighlightUp;
+
+        case KEY_ENTER:
+        case KEY_POWER:
+          return kInvokeItem;
+      }
     }
 
-    RecoveryUI* GetUI() { return ui; }
-
-    int HandleMenuKey(int key, int visible) {
-        if (visible) {
-            switch (key) {
-              case KEY_DOWN:
-              case KEY_VOLUMEDOWN:
-                return kHighlightDown;
-
-              case KEY_UP:
-              case KEY_VOLUMEUP:
-                return kHighlightUp;
-
-              case KEY_ENTER:
-              case KEY_POWER:
-                return kInvokeItem;
-            }
-        }
-
-        return kNoAction;
-    }
-
-    BuiltinAction InvokeMenuItem(int menu_position) {
-        switch (menu_position) {
-          case 0: return REBOOT;
-          case 1: return REBOOT_BOOTLOADER;
-          case 2: return APPLY_ADB_SIDELOAD;
-          case 3: return APPLY_EXT;
-          case 4: return WIPE_DATA;
-          case 5: return WIPE_CACHE;
-          case 6: return READ_RECOVERY_LASTLOG;
-          case 7: return SHUTDOWN;
-          default: return NO_ACTION;
-        }
-    }
-
-    const char* const* GetMenuHeaders() { return HEADERS; }
-    const char* const* GetMenuItems() { return ITEMS; }
-
-  private:
-    RecoveryUI* ui;
+    return kNoAction;
+  }
 };
 
 Device* make_device() {
-    return new DefaultDevice();
+  return new DefaultDevice;
 }
