diff --git a/screen_ui.cpp b/screen_ui.cpp
index 6172b63..bcfaaa4 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -82,14 +82,14 @@
       max_stage(-1),
       updateMutex(PTHREAD_MUTEX_INITIALIZER) {}
 
-GRSurface* ScreenRecoveryUI::GetCurrentFrame() {
+GRSurface* ScreenRecoveryUI::GetCurrentFrame() const {
   if (currentIcon == INSTALLING_UPDATE || currentIcon == ERASING) {
     return intro_done ? loopFrames[current_frame] : introFrames[current_frame];
   }
   return error_icon;
 }
 
-GRSurface* ScreenRecoveryUI::GetCurrentText() {
+GRSurface* ScreenRecoveryUI::GetCurrentText() const {
   switch (currentIcon) {
     case ERASING:
       return erasing_text;
@@ -132,16 +132,16 @@
   { 262,  52, 112, },  // LANDSCAPE_LARGE
 };
 
-int ScreenRecoveryUI::GetAnimationBaseline() {
+int ScreenRecoveryUI::GetAnimationBaseline() const {
   return GetTextBaseline() - PixelsFromDp(kLayouts[layout_][ICON]) - gr_get_height(loopFrames[0]);
 }
 
-int ScreenRecoveryUI::GetTextBaseline() {
+int ScreenRecoveryUI::GetTextBaseline() const {
   return GetProgressBaseline() - PixelsFromDp(kLayouts[layout_][TEXT]) -
          gr_get_height(installing_text);
 }
 
-int ScreenRecoveryUI::GetProgressBaseline() {
+int ScreenRecoveryUI::GetProgressBaseline() const {
   return gr_fb_height() - PixelsFromDp(kLayouts[layout_][PROGRESS]) -
          gr_get_height(progressBarFill);
 }
@@ -224,7 +224,7 @@
   }
 }
 
-void ScreenRecoveryUI::SetColor(UIElement e) {
+void ScreenRecoveryUI::SetColor(UIElement e) const {
   switch (e) {
     case INFO:
       gr_color(249, 194, 0, 255);
@@ -254,7 +254,7 @@
   }
 }
 
-void ScreenRecoveryUI::DrawHorizontalRule(int* y) {
+void ScreenRecoveryUI::DrawHorizontalRule(int* y) const {
   SetColor(MENU);
   *y += 4;
   gr_fill(0, *y, gr_fb_width(), *y + 2);
diff --git a/screen_ui.h b/screen_ui.h
index 2a3d8c3..e8d3c32 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -36,8 +36,8 @@
   bool Init(const std::string& locale) override;
 
   // overall recovery state ("background image")
-  void SetBackground(Icon icon);
-  void SetSystemUpdateText(bool security_update);
+  void SetBackground(Icon icon) override;
+  void SetSystemUpdateText(bool security_update) override;
 
   // progress indicator
   void SetProgressType(ProgressType type) override;
@@ -52,16 +52,17 @@
   bool WasTextEverVisible() override;
 
   // printing messages
-  void Print(const char* fmt, ...) __printflike(2, 3);
-  void PrintOnScreenOnly(const char* fmt, ...) __printflike(2, 3);
-  void ShowFile(const char* filename);
+  void Print(const char* fmt, ...) override __printflike(2, 3);
+  void PrintOnScreenOnly(const char* fmt, ...) override __printflike(2, 3);
+  void ShowFile(const char* filename) override;
 
   // menu display
-  void StartMenu(const char* const* headers, const char* const* items, int initial_selection);
-  int SelectMenu(int sel);
-  void EndMenu();
+  void StartMenu(const char* const* headers, const char* const* items,
+                 int initial_selection) override;
+  int SelectMenu(int sel) override;
+  void EndMenu() override;
 
-  void KeyLongPress(int);
+  void KeyLongPress(int) override;
 
   void Redraw();
 
@@ -75,7 +76,7 @@
     TEXT_FILL,
     INFO
   };
-  void SetColor(UIElement e);
+  void SetColor(UIElement e) const;
 
  protected:
   // The margin that we don't want to use for showing texts (e.g. round screen, or screen with
@@ -158,8 +159,8 @@
   virtual void update_screen_locked();
   virtual void update_progress_locked();
 
-  GRSurface* GetCurrentFrame();
-  GRSurface* GetCurrentText();
+  GRSurface* GetCurrentFrame() const;
+  GRSurface* GetCurrentText() const;
 
   static void* ProgressThreadStartRoutine(void* data);
   void ProgressThreadLoop();
@@ -174,11 +175,11 @@
   void LoadLocalizedBitmap(const char* filename, GRSurface** surface);
 
   int PixelsFromDp(int dp) const;
-  virtual int GetAnimationBaseline();
-  virtual int GetProgressBaseline();
-  virtual int GetTextBaseline();
+  virtual int GetAnimationBaseline() const;
+  virtual int GetProgressBaseline() const;
+  virtual int GetTextBaseline() const;
 
-  virtual void DrawHorizontalRule(int* y);
+  virtual void DrawHorizontalRule(int* y) const;
   virtual void DrawHighlightBar(int x, int y, int width, int height) const;
   virtual void DrawTextLine(int x, int* y, const char* line, bool bold) const;
   void DrawTextLines(int x, int* y, const char* const* lines) const;
diff --git a/ui.h b/ui.h
index ef63e1d..7eb04ae 100644
--- a/ui.h
+++ b/ui.h
@@ -30,14 +30,14 @@
 
   virtual ~RecoveryUI() {}
 
-  // Initialize the object; called before anything else. UI texts will be
-  // initialized according to the given locale. Returns true on success.
+  // Initializes the object; called before anything else. UI texts will be initialized according to
+  // the given locale. Returns true on success.
   virtual bool Init(const std::string& locale);
 
-  // Show a stage indicator.  Call immediately after Init().
+  // Shows a stage indicator. Called immediately after Init().
   virtual void SetStage(int current, int max) = 0;
 
-  // Set the overall recovery state ("background image").
+  // Sets the overall recovery state ("background image").
   enum Icon { NONE, INSTALLING_UPDATE, ERASING, NO_COMMAND, ERROR };
   virtual void SetBackground(Icon icon) = 0;
   virtual void SetSystemUpdateText(bool security_update) = 0;
@@ -46,13 +46,13 @@
   enum ProgressType { EMPTY, INDETERMINATE, DETERMINATE };
   virtual void SetProgressType(ProgressType determinate) = 0;
 
-  // Show a progress bar and define the scope of the next operation:
+  // Shows a progress bar and define the scope of the next operation:
   //   portion - fraction of the progress bar the next operation will use
   //   seconds - expected time interval (progress bar moves at this minimum rate)
   virtual void ShowProgress(float portion, float seconds) = 0;
 
-  // Set progress bar position (0.0 - 1.0 within the scope defined
-  // by the last call to ShowProgress).
+  // Sets progress bar position (0.0 - 1.0 within the scope defined by the last call to
+  // ShowProgress).
   virtual void SetProgress(float fraction) = 0;
 
   // --- text log ---
@@ -63,9 +63,8 @@
 
   virtual bool WasTextEverVisible() = 0;
 
-  // Write a message to the on-screen log (shown if the user has
-  // toggled on the text display). Print() will also dump the message
-  // to stdout / log file, while PrintOnScreenOnly() not.
+  // Writes a message to the on-screen log (shown if the user has toggled on the text display).
+  // Print() will also dump the message to stdout / log file, while PrintOnScreenOnly() not.
   virtual void Print(const char* fmt, ...) __printflike(2, 3) = 0;
   virtual void PrintOnScreenOnly(const char* fmt, ...) __printflike(2, 3) = 0;
 
@@ -73,54 +72,48 @@
 
   // --- key handling ---
 
-  // Wait for a key and return it.  May return -1 after timeout.
+  // Waits for a key and return it. May return -1 after timeout.
   virtual int WaitKey();
 
   virtual bool IsKeyPressed(int key);
   virtual bool IsLongPress();
 
-  // Returns true if you have the volume up/down and power trio typical
-  // of phones and tablets, false otherwise.
+  // Returns true if you have the volume up/down and power trio typical of phones and tablets, false
+  // otherwise.
   virtual bool HasThreeButtons();
 
-  // Erase any queued-up keys.
+  // Erases any queued-up keys.
   virtual void FlushKeys();
 
-  // Called on each key press, even while operations are in progress.
-  // Return value indicates whether an immediate operation should be
-  // triggered (toggling the display, rebooting the device), or if
+  // Called on each key press, even while operations are in progress. Return value indicates whether
+  // an immediate operation should be triggered (toggling the display, rebooting the device), or if
   // the key should be enqueued for use by the main thread.
   enum KeyAction { ENQUEUE, TOGGLE, REBOOT, IGNORE };
   virtual KeyAction CheckKey(int key, bool is_long_press);
 
-  // Called when a key is held down long enough to have been a
-  // long-press (but before the key is released).  This means that
-  // if the key is eventually registered (released without any other
-  // keys being pressed in the meantime), CheckKey will be called with
-  // 'is_long_press' true.
+  // Called when a key is held down long enough to have been a long-press (but before the key is
+  // released). This means that if the key is eventually registered (released without any other keys
+  // being pressed in the meantime), CheckKey will be called with 'is_long_press' true.
   virtual void KeyLongPress(int key);
 
-  // Normally in recovery there's a key sequence that triggers
-  // immediate reboot of the device, regardless of what recovery is
-  // doing (with the default CheckKey implementation, it's pressing
-  // the power button 7 times in row).  Call this to enable or
-  // disable that feature.  It is enabled by default.
+  // Normally in recovery there's a key sequence that triggers immediate reboot of the device,
+  // regardless of what recovery is doing (with the default CheckKey implementation, it's pressing
+  // the power button 7 times in row). Call this to enable or disable that feature. It is enabled by
+  // default.
   virtual void SetEnableReboot(bool enabled);
 
   // --- menu display ---
 
-  // Display some header text followed by a menu of items, which appears
-  // at the top of the screen (in place of any scrolling ui_print()
-  // output, if necessary).
+  // Display some header text followed by a menu of items, which appears at the top of the screen
+  // (in place of any scrolling ui_print() output, if necessary).
   virtual void StartMenu(const char* const* headers, const char* const* items,
                          int initial_selection) = 0;
 
-  // Set the menu highlight to the given index, wrapping if necessary.
-  // Returns the actual item selected.
+  // Sets the menu highlight to the given index, wrapping if necessary. Returns the actual item
+  // selected.
   virtual int SelectMenu(int sel) = 0;
 
-  // End menu mode, resetting the text overlay so that ui_print()
-  // statements will be displayed.
+  // Ends menu mode, resetting the text overlay so that ui_print() statements will be displayed.
   virtual void EndMenu() = 0;
 
  protected:
@@ -130,10 +123,9 @@
   std::string locale_;
   bool rtl_locale_;
 
-  // The normal and dimmed brightness percentages (default: 50 and 25, which means 50% and 25%
-  // of the max_brightness). Because the absolute values may vary across devices. These two
-  // values can be configured via subclassing. Setting brightness_normal_ to 0 to disable
-  // screensaver.
+  // The normal and dimmed brightness percentages (default: 50 and 25, which means 50% and 25% of
+  // the max_brightness). Because the absolute values may vary across devices. These two values can
+  // be configured via subclassing. Setting brightness_normal_ to 0 to disable screensaver.
   unsigned int brightness_normal_;
   unsigned int brightness_dimmed_;
 
diff --git a/wear_ui.cpp b/wear_ui.cpp
index adc316d..640f04a 100644
--- a/wear_ui.cpp
+++ b/wear_ui.cpp
@@ -61,7 +61,7 @@
   self = this;
 }
 
-int WearRecoveryUI::GetProgressBaseline() {
+int WearRecoveryUI::GetProgressBaseline() const {
   return progress_bar_y;
 }
 
diff --git a/wear_ui.h b/wear_ui.h
index e228f9f..e108d4d 100644
--- a/wear_ui.h
+++ b/wear_ui.h
@@ -47,12 +47,11 @@
   // outer of window
   int outer_height, outer_width;
 
-  // Unusable rows when displaying the recovery menu, including the lines
-  // for headers (Android Recovery, build id and etc) and the bottom lines
-  // that may otherwise go out of the screen.
+  // Unusable rows when displaying the recovery menu, including the lines for headers (Android
+  // Recovery, build id and etc) and the bottom lines that may otherwise go out of the screen.
   int menu_unusable_rows;
 
-  int GetProgressBaseline() override;
+  int GetProgressBaseline() const override;
 
   bool InitTextParams() override;
 
