diff --git a/screen_ui.cpp b/screen_ui.cpp
index c538815..2db27d6 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -600,7 +600,7 @@
   return gr_fb_height();
 }
 
-void ScreenRecoveryUI::DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx,
+void ScreenRecoveryUI::DrawSurface(const GRSurface* surface, int sx, int sy, int w, int h, int dx,
                                    int dy) const {
   gr_blit(surface, sx, sy, w, h, dx, dy);
 }
@@ -618,7 +618,7 @@
   gr_fill(x, y, w, h);
 }
 
-void ScreenRecoveryUI::DrawTextIcon(int x, int y, GRSurface* surface) const {
+void ScreenRecoveryUI::DrawTextIcon(int x, int y, const GRSurface* surface) const {
   gr_texticon(x, y, surface);
 }
 
diff --git a/screen_ui.h b/screen_ui.h
index b1be100..2d0d97d 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -60,14 +60,14 @@
   virtual int DrawTextLine(int x, int y, const std::string& line, bool bold) const = 0;
 
   // Draws surface portion (sx, sy, w, h) at screen location (dx, dy).
-  virtual void DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx,
+  virtual void DrawSurface(const GRSurface* surface, int sx, int sy, int w, int h, int dx,
                            int dy) const = 0;
 
   // Draws rectangle at (x, y) - (x + w, y + h).
   virtual void DrawFill(int x, int y, int w, int h) const = 0;
 
   // Draws given surface (surface->pixel_bytes = 1) as text at (x, y).
-  virtual void DrawTextIcon(int x, int y, GRSurface* surface) const = 0;
+  virtual void DrawTextIcon(int x, int y, const GRSurface* surface) const = 0;
 
   // Draws multiple text lines. Returns the offset it should be moving along Y-axis.
   virtual int DrawTextLines(int x, int y, const std::vector<std::string>& lines) const = 0;
@@ -316,9 +316,10 @@
   void SetColor(UIElement e) const override;
   void DrawHighlightBar(int x, int y, int width, int height) const override;
   int DrawHorizontalRule(int y) const override;
-  void DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx, int dy) const override;
+  void DrawSurface(const GRSurface* surface, int sx, int sy, int w, int h, int dx,
+                   int dy) const override;
   void DrawFill(int x, int y, int w, int h) const override;
-  void DrawTextIcon(int x, int y, GRSurface* surface) const override;
+  void DrawTextIcon(int x, int y, const GRSurface* surface) const override;
   int DrawTextLine(int x, int y, const std::string& line, bool bold) const override;
   int DrawTextLines(int x, int y, const std::vector<std::string>& lines) const override;
   int DrawWrappedTextLines(int x, int y, const std::vector<std::string>& lines) const override;
diff --git a/tests/unit/screen_ui_test.cpp b/tests/unit/screen_ui_test.cpp
index 06a98c7..0014e45 100644
--- a/tests/unit/screen_ui_test.cpp
+++ b/tests/unit/screen_ui_test.cpp
@@ -42,26 +42,26 @@
 class MockDrawFunctions : public DrawInterface {
   void SetColor(UIElement /* element */) const override {}
   void DrawHighlightBar(int /* x */, int /* y */, int /* width */,
-                        int /* height */) const override {};
+                        int /* height */) const override {}
   int DrawHorizontalRule(int /* y */) const override {
     return 0;
-  };
+  }
   int DrawTextLine(int /* x */, int /* y */, const std::string& /* line */,
                    bool /* bold */) const override {
     return 0;
-  };
-  void DrawSurface(GRSurface* /* surface */, int /* sx */, int /* sy */, int /* w */, int /* h */,
-                   int /* dx */, int /* dy */) const override {};
-  void DrawFill(int /* x */, int /* y */, int /* w */, int /* h */) const override {};
-  void DrawTextIcon(int /* x */, int /* y */, GRSurface* /* surface */) const override {};
+  }
+  void DrawSurface(const GRSurface* /* surface */, int /* sx */, int /* sy */, int /* w */,
+                   int /* h */, int /* dx */, int /* dy */) const override {}
+  void DrawFill(int /* x */, int /* y */, int /* w */, int /* h */) const override {}
+  void DrawTextIcon(int /* x */, int /* y */, const GRSurface* /* surface */) const override {}
   int DrawTextLines(int /* x */, int /* y */,
                     const std::vector<std::string>& /* lines */) const override {
     return 0;
-  };
+  }
   int DrawWrappedTextLines(int /* x */, int /* y */,
                            const std::vector<std::string>& /* lines */) const override {
     return 0;
-  };
+  }
 };
 
 class ScreenUITest : public testing::Test {
diff --git a/vr_ui.cpp b/vr_ui.cpp
index a131a27..1f0292c 100644
--- a/vr_ui.cpp
+++ b/vr_ui.cpp
@@ -34,13 +34,13 @@
   return gr_fb_height();
 }
 
-void VrRecoveryUI::DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx,
+void VrRecoveryUI::DrawSurface(const GRSurface* surface, int sx, int sy, int w, int h, int dx,
                                int dy) const {
   gr_blit(surface, sx, sy, w, h, dx + stereo_offset_, dy);
   gr_blit(surface, sx, sy, w, h, dx - stereo_offset_ + ScreenWidth(), dy);
 }
 
-void VrRecoveryUI::DrawTextIcon(int x, int y, GRSurface* surface) const {
+void VrRecoveryUI::DrawTextIcon(int x, int y, const GRSurface* surface) const {
   gr_texticon(x + stereo_offset_, y, surface);
   gr_texticon(x - stereo_offset_ + ScreenWidth(), y, surface);
 }
diff --git a/vr_ui.h b/vr_ui.h
index 63c0f24..2e8ac59 100644
--- a/vr_ui.h
+++ b/vr_ui.h
@@ -33,11 +33,12 @@
   int ScreenWidth() const override;
   int ScreenHeight() const override;
 
-  void DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx, int dy) const override;
+  void DrawSurface(const GRSurface* surface, int sx, int sy, int w, int h, int dx,
+                   int dy) const override;
   int DrawHorizontalRule(int y) const override;
   void DrawHighlightBar(int x, int y, int width, int height) const override;
   void DrawFill(int x, int y, int w, int h) const override;
-  void DrawTextIcon(int x, int y, GRSurface* surface) const override;
+  void DrawTextIcon(int x, int y, const GRSurface* surface) const override;
   int DrawTextLine(int x, int y, const std::string& line, bool bold) const override;
 };
 
