diff --git a/src/core/linux/SDL_evdev.c b/src/core/linux/SDL_evdev.c
index 7b51e4b..0ae3194 100644
--- a/src/core/linux/SDL_evdev.c
+++ b/src/core/linux/SDL_evdev.c
@@ -270,9 +270,7 @@
                     /* BTH_TOUCH event value 1 indicates there is contact with
                        a touchscreen or trackpad (earlist finger's current
                        position is sent in EV_ABS ABS_X/ABS_Y, switching to
-                       next finger after earlist is released) however using it
-                       for virtual mouse SDL_TOUCH_MOUSEID would differ from
-                       other SDL backends which require a new finger touch. */
+                       next finger after earlist is released) */
                     if (item->is_touchscreen && events[i].code == BTN_TOUCH) {
                         break;
                     }
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index 2d9ad8f..451b451 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -298,10 +298,6 @@
     int xrel;
     int yrel;
 
-    if (mouseID == SDL_TOUCH_MOUSEID && !mouse->touch_mouse_events) {
-        return 0;
-    }
-
     if (mouseID != SDL_TOUCH_MOUSEID && mouse->relative_mode_warp) {
         int center_x = 0, center_y = 0;
         SDL_GetWindowSize(window, &center_x, &center_y);
@@ -447,10 +443,6 @@
     Uint32 type;
     Uint32 buttonstate = mouse->buttonstate;
 
-    if (mouseID == SDL_TOUCH_MOUSEID && !mouse->touch_mouse_events) {
-        return 0;
-    }
-
     /* Figure out which event to perform */
     switch (state) {
     case SDL_PRESSED:
@@ -520,7 +512,7 @@
     if (window && state == SDL_RELEASED) {
         SDL_UpdateMouseFocus(window, mouse->x, mouse->y, buttonstate);
     }
-    
+
     return posted;
 }
 
diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c
index 0d227b4..1f5810a 100644
--- a/src/events/SDL_touch.c
+++ b/src/events/SDL_touch.c
@@ -32,11 +32,9 @@
 static SDL_Touch **SDL_touchDevices = NULL;
 
 /* for mapping touch events to mice */
-#define DUPLICATE_TO_MOUSE_EVENT
-#if defined(DUPLICATE_TO_MOUSE_EVENT)
 static SDL_bool finger_touching = SDL_FALSE;
-static SDL_FingerID first_finger;
-#endif
+static SDL_FingerID track_fingerid;
+static SDL_TouchID  track_touchid;
 
 /* Public functions */
 int
@@ -247,28 +245,31 @@
         return -1;
     }
 
-#if defined(DUPLICATE_TO_MOUSE_EVENT)
+    /* SDL_HINT_TOUCH_MOUSE_EVENTS: controlling whether touch events should generate synthetic mouse events */
     {
-        SDL_Window *window = SDL_GetMouseFocus();
-        if (window) {
-            if (down) {
-                if (finger_touching == SDL_FALSE) {
-                    int pos_x = (int)(x * (float)window->w);
-                    int pos_y = (int)(y * (float)window->h);
-                    finger_touching = SDL_TRUE;
-                    first_finger = fingerid;
-                    SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
-                    SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
-                }
-            } else {
-                if (finger_touching == SDL_TRUE && first_finger == fingerid) {
-                    SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
-                    finger_touching = SDL_FALSE;
+        SDL_Mouse *mouse = SDL_GetMouse();
+        if (mouse->touch_mouse_events) {
+            SDL_Window *window = SDL_GetMouseFocus();
+            if (window) {
+                if (down) {
+                    if (finger_touching == SDL_FALSE) {
+                        int pos_x = (int)(x * (float)window->w);
+                        int pos_y = (int)(y * (float)window->h);
+                        finger_touching = SDL_TRUE;
+                        track_touchid = id;
+                        track_fingerid = fingerid;
+                        SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
+                        SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
+                    }
+                } else {
+                    if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) {
+                        SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
+                        finger_touching = SDL_FALSE;
+                    }
                 }
             }
         }
     }
-#endif
 
     finger = SDL_GetFinger(touch, fingerid);
     if (down) {
@@ -334,18 +335,20 @@
         return -1;
     }
 
-#if defined(DUPLICATE_TO_MOUSE_EVENT)
+    /* SDL_HINT_TOUCH_MOUSE_EVENTS: controlling whether touch events should generate synthetic mouse events */
     {
-        SDL_Window *window = SDL_GetMouseFocus();
-        if (window) {
-            if (finger_touching == SDL_TRUE && first_finger == fingerid) {
-                int pos_x = (int)(x * (float)window->w);
-                int pos_y = (int)(y * (float)window->h);
-                SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
+        SDL_Mouse *mouse = SDL_GetMouse();
+        if (mouse->touch_mouse_events) {
+            SDL_Window *window = SDL_GetMouseFocus();
+            if (window) {
+                if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) {
+                    int pos_x = (int)(x * (float)window->w);
+                    int pos_y = (int)(y * (float)window->h);
+                    SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y);
+                }
             }
         }
     }
-#endif
 
     finger = SDL_GetFinger(touch,fingerid);
     if (!finger) {
