diff --git a/BoardConfig.mk b/BoardConfig.mk
index 9af06b8..32e6fd7 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -30,7 +30,6 @@
 
 BOARD_HAVE_BLUETOOTH := true
 TARGET_NO_BOOTLOADER := true
-TARGET_NO_RECOVERY := true
 
 BOARD_KERNEL_BASE := 0x80000000
 #BOARD_KERNEL_CMDLINE :=
@@ -39,6 +38,12 @@
 TARGET_BOARD_PLATFORM := omap4
 TARGET_BOOTLOADER_BOARD_NAME := panda 
 
+# Recovery
+TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888"
+TARGET_RECOVERY_UI_LIB := librecovery_ui_panda
+# device-specific extensions to the updater binary
+TARGET_RELEASETOOLS_EXTENSIONS := device/ti/panda
+
 BOARD_EGL_CFG := device/ti/panda/egl.cfg
 
 #BOARD_USES_HGL := true
diff --git a/board-info.txt b/board-info.txt
new file mode 100644
index 0000000..3721eb1
--- /dev/null
+++ b/board-info.txt
@@ -0,0 +1,2 @@
+require board=panda
+
diff --git a/device.mk b/device.mk
index 7e7eb90..2eaad17 100644
--- a/device.mk
+++ b/device.mk
@@ -71,7 +71,8 @@
 
 # Filesystem management tools
 PRODUCT_PACKAGES += \
-	make_ext4fs
+	make_ext4fs \
+	setup_fs
 
 # BlueZ test tools
 PRODUCT_PACKAGES += \
diff --git a/init.omap4pandaboard.rc b/init.omap4pandaboard.rc
index f6d0b73..bac0fa2 100644
--- a/init.omap4pandaboard.rc
+++ b/init.omap4pandaboard.rc
@@ -48,6 +48,15 @@
 	group root
 	oneshot
 
+# create filesystems if necessary
+service setup_fs /system/bin/setup_fs \
+		/dev/block/platform/omap/omap_hsmmc.0/by-name/cache \
+		/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
+        class core
+        user root
+        group root
+        oneshot
+
 #shared transport user space mgr service for Bluetooth, FM and GPS
 service uim /system/bin/uim-sysfs
 	class core
diff --git a/recovery/Android.mk b/recovery/Android.mk
new file mode 100644
index 0000000..5055f6a
--- /dev/null
+++ b/recovery/Android.mk
@@ -0,0 +1,15 @@
+ifeq ($(TARGET_DEVICE),panda)
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES += bootable/recovery
+LOCAL_SRC_FILES := recovery_ui.c
+
+# should match TARGET_RECOVERY_UI_LIB set in BoardConfig.mk
+LOCAL_MODULE := librecovery_ui_panda
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif
diff --git a/recovery/recovery_ui.c b/recovery/recovery_ui.c
new file mode 100644
index 0000000..cf8b2fc
--- /dev/null
+++ b/recovery/recovery_ui.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2010 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 "recovery_ui.h"
+#include "common.h"
+
+char* MENU_HEADERS[] = { "Volume up/down to move highlight;",
+                         "power button to select.",
+                         "",
+                         NULL };
+
+char* MENU_ITEMS[] = { "reboot system now",
+                       "apply update from /sdcard",
+                       "wipe data/factory reset",
+                       "wipe cache partition",
+                       NULL };
+
+void device_ui_init(UIParameters* ui_parameters) {
+}
+
+int device_recovery_start() {
+    // recovery can get started before the kernel has created the EMMC
+    // devices, which will make the wipe_data operation fail (trying
+    // to open a device that doesn't exist).  Hold up the start of
+    // recovery for up to 5 seconds waiting for the userdata partition
+    // block device to exist.
+
+    const char* fn = "/dev/block/platform/mmci-omap-hs.0/by-name/userdata";
+
+    int tries = 0;
+    int ret;
+    struct stat buf;
+    do {
+        ++tries;
+        ret = stat(fn, &buf);
+        if (ret) {
+            printf("try %d: %s\n", tries, strerror(errno));
+            sleep(1);
+        }
+    } while (ret && tries < 5);
+    if (!ret) {
+        printf("stat() of %s succeeded on try %d\n", fn, tries);
+    } else {
+        printf("failed to stat %s\n", fn);
+    }
+
+    // We let recovery attempt to carry on even if the stat never
+    // succeeded.
+
+    return 0;
+}
+
+int device_toggle_display(volatile char* key_pressed, int key_code) {
+    // hold power and press volume-up
+    return key_pressed[KEY_POWER] && key_code == KEY_VOLUMEUP;
+}
+
+int device_reboot_now(volatile char* key_pressed, int key_code) {
+    // Reboot if the power key is pressed five times in a row, with
+    // no other keys in between.
+    static int presses = 0;
+    if (key_code == KEY_POWER) {   // power button
+        ++presses;
+        return presses == 5;
+    } else {
+        presses = 0;
+        return 0;
+    }
+}
+
+int device_handle_key(int key_code, int visible) {
+    if (visible) {
+        switch (key_code) {
+            case KEY_DOWN:
+            case KEY_VOLUMEDOWN:
+                return HIGHLIGHT_DOWN;
+
+            case KEY_UP:
+            case KEY_VOLUMEUP:
+                return HIGHLIGHT_UP;
+
+            case KEY_ENTER:
+            case KEY_POWER:   // crespo power
+                return SELECT_ITEM;
+        }
+    }
+
+    return NO_ACTION;
+}
+
+int device_perform_action(int which) {
+    return which;
+}
+
+int device_wipe_data() {
+    return 0;
+}
