diff --git a/gui/gui.cpp b/gui/gui.cpp
index 9f22138..8755689 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -185,8 +185,6 @@
   static struct timeval touchStart;
   HardwareKeyboard kb;
   string seconds;
-  int screen_width = gr_fb_width();
-  int screen_height = gr_fb_height();
 
   //start screen timeout threads
   blankTimer.setTimerThread();
@@ -200,7 +198,7 @@
 	  struct input_event ev;
 	  int state = 0, ret = 0;
 
-	  ret = ev_get (&ev, dontwait, &screen_width, &screen_height);
+	  ret = ev_get (&ev, dontwait);
 
 	  if (ret < 0)
 		{
diff --git a/minuitwrp/events.c b/minuitwrp/events.c
index 2653d18..4368c15 100644
--- a/minuitwrp/events.c
+++ b/minuitwrp/events.c
@@ -288,7 +288,7 @@
     return (screen_pos >= 0 && screen_pos < screen_size);
 }
 
-static int vk_tp_to_screen(struct position *p, int *x, int *y, int *screen_width, int *screen_height)
+static int vk_tp_to_screen(struct position *p, int *x, int *y)
 {
     if (p->xi.minimum == p->xi.maximum || p->yi.minimum == p->yi.maximum)
     {
@@ -298,16 +298,17 @@
         return 0;
     }
 
+#ifdef _EVENT_LOGGING
+    printf("EV: p->x=%d  x-range=%d,%d  fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, gr_fb_width());
+#endif
+
 #ifndef RECOVERY_TOUCHSCREEN_SWAP_XY
-    int fb_width = *screen_width;
-    int fb_height = *screen_height;
+    int fb_width = gr_fb_width();
+    int fb_height = gr_fb_height();
 #else
     // We need to swap the scaling sizes, too
-    int fb_width = *screen_height;
-    int fb_height = *screen_width;
-#endif
-#ifdef _EVENT_LOGGING
-    printf("EV: p->x=%d  x-range=%d,%d  fb-width=%d\n", p->x, p->xi.minimum, p->xi.maximum, *screen_width);
+    int fb_width = gr_fb_height();
+    int fb_height = gr_fb_width();
 #endif
 
     *x = (p->x - p->xi.minimum) * (fb_width - 1) / (p->xi.maximum - p->xi.minimum);
@@ -324,7 +325,7 @@
 
 /* Translate a virtual key in to a real key event, if needed */
 /* Returns non-zero when the event should be consumed */
-static int vk_modify(struct ev *e, struct input_event *ev, int *screen_width, int *screen_height)
+static int vk_modify(struct ev *e, struct input_event *ev)
 {
     static int downX = -1, downY = -1;
     static int discard = 0;
@@ -544,11 +545,11 @@
     // Retrieve where the x,y position is
     if (e->p.synced & 0x03)
     {
-        vk_tp_to_screen(&e->p, &x, &y, screen_width, screen_height);
+        vk_tp_to_screen(&e->p, &x, &y);
     }
     else if (e->mt_p.synced & 0x03)
     {
-        vk_tp_to_screen(&e->mt_p, &x, &y, screen_width, screen_height);
+        vk_tp_to_screen(&e->mt_p, &x, &y);
     }
     else
     {
@@ -562,10 +563,10 @@
     x ^= y;
 #endif
 #ifdef RECOVERY_TOUCHSCREEN_FLIP_X
-    x = *screen_width - x;
+    x = gr_fb_width() - x;
 #endif
 #ifdef RECOVERY_TOUCHSCREEN_FLIP_Y
-    y = *screen_height - y;
+    y = gr_fb_height() - y;
 #endif
 
 #ifdef _EVENT_LOGGING
@@ -620,7 +621,7 @@
     return 0;
 }
 
-int ev_get(struct input_event *ev, unsigned dont_wait, int *screen_width, int *screen_height)
+int ev_get(struct input_event *ev, unsigned dont_wait)
 {
     int r;
     unsigned n;
@@ -633,7 +634,7 @@
                 if(ev_fds[n].revents & POLLIN) {
                     r = read(ev_fds[n].fd, ev, sizeof(*ev));
                     if(r == sizeof(*ev)) {
-                        if (!vk_modify(&evs[n], ev, screen_width, screen_height))
+                        if (!vk_modify(&evs[n], ev))
                             return 0;
                     }
                 }
diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h
index 66e7f4f..03e15bb 100644
--- a/minuitwrp/minui.h
+++ b/minuitwrp/minui.h
@@ -57,7 +57,7 @@
 
 int ev_init(void);
 void ev_exit(void);
-int ev_get(struct input_event *ev, unsigned dont_wait, int *screen_width, int *screen_height);
+int ev_get(struct input_event *ev, unsigned dont_wait);
 
 // Resources
 
