diff --git a/Android.mk b/Android.mk
index 5ce9d33..4ac8856 100644
--- a/Android.mk
+++ b/Android.mk
@@ -105,6 +105,12 @@
 LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_WIDTH=0
 endif
 
+ifneq ($(TARGET_RECOVERY_UI_VR_STEREO_OFFSET),)
+LOCAL_CFLAGS += -DRECOVERY_UI_VR_STEREO_OFFSET=$(TARGET_RECOVERY_UI_VR_STEREO_OFFSET)
+else
+LOCAL_CFLAGS += -DRECOVERY_UI_VR_STEREO_OFFSET=0
+endif
+
 LOCAL_C_INCLUDES += \
     system/vold \
 
diff --git a/screen_ui.cpp b/screen_ui.cpp
index d21a648..c41bb22 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -336,7 +336,7 @@
   SetColor(LOG);
   int row = (text_top_ + text_rows_ - 1) % text_rows_;
   size_t count = 0;
-  for (int ty = gr_fb_height() - kMarginHeight - char_height_ - log_bottom_offset_;
+  for (int ty = gr_fb_height() - kMarginHeight - char_height_;
        ty >= y && count < text_rows_; ty -= char_height_, ++count) {
     int temp_y = ty;
     DrawTextLine(x, &temp_y, text_[row], false);
@@ -459,7 +459,6 @@
   gr_font_size(gr_sys_font(), &char_width_, &char_height_);
   text_rows_ = (gr_fb_height() - kMarginHeight * 2) / char_height_;
   text_cols_ = (gr_fb_width() - kMarginWidth * 2) / char_width_;
-  log_bottom_offset_ = 0;
   return true;
 }
 
diff --git a/screen_ui.h b/screen_ui.h
index e961c1c..2500575 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -113,7 +113,6 @@
     // Log text overlay, displayed when a magic key is pressed.
     char** text_;
     size_t text_col_, text_row_, text_top_;
-    int log_bottom_offset_;
 
     bool show_text;
     bool show_text_ever;   // has show_text ever been true?
diff --git a/vr_ui.cpp b/vr_ui.cpp
index b2c65e3..8b8261e 100644
--- a/vr_ui.cpp
+++ b/vr_ui.cpp
@@ -18,39 +18,18 @@
 
 #include <minui/minui.h>
 
-VrRecoveryUI::VrRecoveryUI() :
-  x_offset(400),
-  y_offset(400),
-  stereo_offset(100) {
-}
+VrRecoveryUI::VrRecoveryUI() : kStereoOffset(RECOVERY_UI_VR_STEREO_OFFSET) {}
 
 bool VrRecoveryUI::InitTextParams() {
-  if (gr_init() < 0) {
-    return false;
-  }
-
-  gr_font_size(gr_sys_font(), &char_width_, &char_height_);
+  if (!ScreenRecoveryUI::InitTextParams()) return false;
   int mid_divide = gr_fb_width() / 2;
-  text_rows_ = (gr_fb_height() - 2 * y_offset) / char_height_;
-  text_cols_ = (mid_divide - x_offset - stereo_offset) / char_width_;
-  log_bottom_offset_ = gr_fb_height() - 2 * y_offset;
+  text_cols_ = (mid_divide - kMarginWidth - kStereoOffset) / char_width_;
   return true;
 }
 
-void VrRecoveryUI::DrawHorizontalRule(int* y) {
-  SetColor(MENU);
-  *y += 4;
-  gr_fill(0, *y + y_offset, gr_fb_width(), *y + y_offset + 2);
-  *y += 4;
-}
-
-void VrRecoveryUI::DrawHighlightBar(int x, int y, int width, int height) const {
-  gr_fill(x, y + y_offset, x + width, y + y_offset + height);
-}
-
 void VrRecoveryUI::DrawTextLine(int x, int* y, const char* line, bool bold) const {
   int mid_divide = gr_fb_width() / 2;
-  gr_text(gr_sys_font(), x + x_offset + stereo_offset, *y + y_offset, line, bold);
-  gr_text(gr_sys_font(), x + x_offset - stereo_offset + mid_divide, *y + y_offset, line, bold);
+  gr_text(gr_sys_font(), x + kStereoOffset, *y, line, bold);
+  gr_text(gr_sys_font(), x - kStereoOffset + mid_divide, *y, line, bold);
   *y += char_height_ + 4;
 }
diff --git a/vr_ui.h b/vr_ui.h
index 85c5708..31ca4a6 100644
--- a/vr_ui.h
+++ b/vr_ui.h
@@ -26,12 +26,10 @@
   protected:
     // Pixel offsets to move drawing functions to visible range.
     // Can vary per device depending on screen size and lens distortion.
-    int x_offset, y_offset, stereo_offset;
+    const int kStereoOffset;
 
     bool InitTextParams() override;
 
-    void DrawHorizontalRule(int* y) override;
-    void DrawHighlightBar(int x, int y, int width, int height) const override;
     void DrawTextLine(int x, int* y, const char* line, bool bold) const override;
 };
 
