diff --git a/ui.c b/ui.c
index 6db4ef7..363019a 100644
--- a/ui.c
+++ b/ui.c
@@ -33,6 +33,8 @@
 #include "minui/minui.h"
 #include "recovery_ui.h"
 
+#include "touch.h"
+
 extern int __system(const char *command);
 
 #ifdef BOARD_HAS_NO_SELECT_BUTTON
@@ -47,6 +49,8 @@
 #define MENU_MAX_COLS 64
 #define MENU_MAX_ROWS 250
 
+#define MIN_LOG_ROWS 3
+
 #define CHAR_WIDTH BOARD_RECOVERY_CHAR_WIDTH
 #define CHAR_HEIGHT BOARD_RECOVERY_CHAR_HEIGHT
 
@@ -106,6 +110,7 @@
 static int show_menu = 0;
 static int menu_top = 0, menu_items = 0, menu_sel = 0;
 static int menu_show_start = 0;             // this is line which menu display is starting at
+static int max_menu_rows;
 
 // Key event input queue
 static pthread_mutex_t key_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -219,6 +224,7 @@
         gr_color(0, 0, 0, 160);
         gr_fill(0, 0, gr_fb_width(), gr_fb_height());
 
+        int total_rows = gr_fb_height() / CHAR_HEIGHT;
         int i = 0;
         int j = 0;
         int offset = 0;         // offset of separating bar under menus
@@ -250,6 +256,8 @@
                     draw_text_line(i - menu_show_start, menu[i]);
                 }
                 row++;
+                if (row == max_menu_rows)
+                    break;
             }
 
             if (menu_items <= MAX_ROWS)
@@ -260,8 +268,17 @@
         }
 
         gr_color(NORMAL_TEXT_COLOR);
-        for (; row < text_rows; ++row) {
-            draw_text_line(row, text[(row+text_top) % text_rows]);
+        int cur_row = text_row;
+        int available_rows = total_rows - row - 1;
+        int start_row = row + 1;
+        if (available_rows < MAX_ROWS)
+            cur_row = (cur_row + (MAX_ROWS - available_rows)) % MAX_ROWS;
+        else
+            start_row = total_rows - MAX_ROWS;
+
+        int r;
+        for (r = 0; r < (available_rows < MAX_ROWS ? available_rows : MAX_ROWS); r++) {
+            draw_text_line(start_row + r, text[(cur_row + r) % MAX_ROWS]);
         }
     }
 }
@@ -351,6 +368,9 @@
     if (ret)
         return -1;
 
+    if (touch_handle_input(ev))
+      return 0;
+
     if (ev.type == EV_SYN) {
         return 0;
     } else if (ev.type == EV_REL) {
@@ -425,9 +445,11 @@
     ui_has_initialized = 1;
     gr_init();
     ev_init(input_callback, NULL);
+    touch_init(gr_fb_width(), gr_fb_height(), key_pressed, key_queue, &key_queue_len, &key_queue_mutex, &key_queue_cond);
 
     text_col = text_row = 0;
     text_rows = gr_fb_height() / CHAR_HEIGHT;
+    max_menu_rows = text_rows - MIN_LOG_ROWS;
     if (text_rows > MAX_ROWS) text_rows = MAX_ROWS;
     text_top = 1;
 
@@ -637,8 +659,8 @@
         for (; i < MENU_MAX_ROWS; ++i) {
             if (items[i-menu_top] == NULL) break;
             strcpy(menu[i], MENU_ITEM_HEADER);
-            strncpy(menu[i] + MENU_ITEM_HEADER_LENGTH, items[i-menu_top], text_cols-1 - MENU_ITEM_HEADER_LENGTH);
-            menu[i][text_cols-1] = '\0';
+            strncpy(menu[i] + MENU_ITEM_HEADER_LENGTH, items[i-menu_top], MENU_MAX_COLS - 1 - MENU_ITEM_HEADER_LENGTH);
+            menu[i][MENU_MAX_COLS-1] = '\0';
         }
 
         if (gShowBackButton && ui_menu_level > 0) {
@@ -676,8 +698,8 @@
             menu_show_start = menu_sel;
         }
 
-        if (menu_sel - menu_show_start + menu_top >= text_rows) {
-            menu_show_start = menu_sel + menu_top - text_rows + 1;
+        if (menu_sel - menu_show_start + menu_top >= max_menu_rows) {
+            menu_show_start = menu_sel + menu_top - max_menu_rows + 1;
         }
 
         sel = menu_sel;
