diff --git a/BoardConfig.mk b/BoardConfig.mk
index 2fd4742..0c2c151 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -52,6 +52,8 @@
 BOARD_CHARGER_DISABLE_INIT_BLANK := true
 
 TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
+TARGET_RECOVERY_UI_LIB := librecovery_ui_hammerhead
+
 TARGET_RELEASETOOLS_EXTENSIONS := device/lge/hammerhead
 
 BOARD_LIB_DUMPSTATE := libdumpstate.hammerhead
diff --git a/recovery/Android.mk b/recovery/Android.mk
new file mode 100644
index 0000000..1216adf
--- /dev/null
+++ b/recovery/Android.mk
@@ -0,0 +1,13 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := eng
+LOCAL_C_INCLUDES += bootable/recovery
+LOCAL_SRC_FILES := recovery_ui.cpp
+
+# should match TARGET_RECOVERY_UI_LIB set in BoardConfig.mk
+LOCAL_MODULE := librecovery_ui_hammerhead
+
+include $(BUILD_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
diff --git a/recovery/recovery_ui.cpp b/recovery/recovery_ui.cpp
new file mode 100644
index 0000000..4ef282d
--- /dev/null
+++ b/recovery/recovery_ui.cpp
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <linux/input.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <string.h>
+
+#include "common.h"
+#include "device.h"
+#include "screen_ui.h"
+
+const char* HEADERS[] = { "Volume up/down to move highlight;",
+                          "power button to select.",
+                          "",
+                          NULL };
+
+const char* ITEMS[] = { "reboot system now",
+                        "apply update from ADB",
+                        "wipe data/factory reset",
+                        "wipe cache partition",
+                        NULL };
+
+class HammerheadUI : public ScreenRecoveryUI
+{
+public:
+    HammerheadUI() :
+        consecutive_power_keys(0) {
+    }
+
+    virtual KeyAction CheckKey(int key) {
+        if (IsKeyPressed(KEY_POWER) && key == KEY_VOLUMEUP) {
+            return TOGGLE;
+        }
+        if (key == KEY_POWER) {
+            ++consecutive_power_keys;
+            if (consecutive_power_keys >= 7) {
+                return REBOOT;
+            }
+        } else {
+            consecutive_power_keys = 0;
+        }
+        return ENQUEUE;
+    }
+
+private:
+    int consecutive_power_keys;
+};
+
+class HammerheadDevice : public Device
+{
+public:
+    HammerheadDevice() :
+        ui(new HammerheadUI) {
+    }
+
+    RecoveryUI* GetUI() { return ui; }
+
+    int HandleMenuKey(int key_code, int visible) {
+        if (visible) {
+            switch (key_code) {
+            case KEY_DOWN:
+            case KEY_VOLUMEDOWN:
+                return kHighlightDown;
+
+            case KEY_UP:
+            case KEY_VOLUMEUP:
+                return kHighlightUp;
+
+            case KEY_POWER:
+                return kInvokeItem;
+            }
+        }
+
+        return kNoAction;
+    }
+
+    BuiltinAction InvokeMenuItem(int menu_position) {
+        switch (menu_position) {
+        case 0: return REBOOT;
+        case 1: return APPLY_ADB_SIDELOAD;
+        case 2: return WIPE_DATA;
+        case 3: return WIPE_CACHE;
+        default: return NO_ACTION;
+        }
+    }
+
+    const char* const* GetMenuHeaders() { return HEADERS; }
+    const char* const* GetMenuItems() { return ITEMS; }
+
+private:
+    RecoveryUI* ui;
+};
+
+Device* make_device() {
+    return new HammerheadDevice;
+}
