diff --git a/thunar/thunar-abstract-icon-view.c b/thunar/thunar-abstract-icon-view.c
index 438768197227aa249b1b0e0f8ad86c812aa811f7..a03be2d0226b5962c240ad282c166e2711bd5d36 100644
--- a/thunar/thunar-abstract-icon-view.c
+++ b/thunar/thunar-abstract-icon-view.c
@@ -511,7 +511,9 @@ thunar_abstract_icon_view_draw (ExoIconView            *view,
 {
   const XfceGtkActionEntry *action_entry = NULL;
   GdkPixbuf                *gesture_icon = NULL;
+  cairo_surface_t          *surface;
   gint                      x, y;
+  gint                      scale_factor;
 
   _thunar_return_val_if_fail (EXO_IS_ICON_VIEW (view), FALSE);
   _thunar_return_val_if_fail (THUNAR_IS_ABSTRACT_ICON_VIEW (abstract_icon_view), FALSE);
@@ -519,6 +521,8 @@ thunar_abstract_icon_view_draw (ExoIconView            *view,
   _thunar_return_val_if_fail (abstract_icon_view->priv->gesture_motion_id > 0, FALSE);
   _thunar_return_val_if_fail (abstract_icon_view->priv->gesture_release_id > 0, FALSE);
 
+  scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (view));
+
   /* shade the abstract_icon view content while performing mouse gestures */
   cairo_set_source_rgba (cr, 1, 1, 1, 0.7);
   cairo_paint (cr);
@@ -532,25 +536,27 @@ thunar_abstract_icon_view_draw (ExoIconView            *view,
     {
       gesture_icon = gtk_icon_theme_load_icon (gtk_icon_theme_get_default(),
                                                action_entry->menu_item_icon_name,
-                                               32,
+                                               32 * scale_factor,
                                                GTK_ICON_LOOKUP_FORCE_SIZE,
                                                NULL);
       /* draw the rendered icon */
       if (G_LIKELY (gesture_icon != NULL))
         {
           /* x/y position of the icon */
-          x = abstract_icon_view->priv->gesture_start_x - gdk_pixbuf_get_width (gesture_icon) / 2;
-          y = abstract_icon_view->priv->gesture_start_y - gdk_pixbuf_get_height (gesture_icon) / 2;
+          x = abstract_icon_view->priv->gesture_start_x - gdk_pixbuf_get_width (gesture_icon) / (scale_factor * 2);
+          y = abstract_icon_view->priv->gesture_start_y - gdk_pixbuf_get_height (gesture_icon) / (scale_factor * 2);
 
           /* render the icon into the abstract_icon view window */
-          gdk_cairo_set_source_pixbuf (cr, gesture_icon, x, y);
+          surface = gdk_cairo_surface_create_from_pixbuf (gesture_icon, scale_factor, gtk_widget_get_window (GTK_WIDGET (view)));
+          cairo_set_source_surface (cr, surface, x, y);
           cairo_rectangle (cr, x, y,
                            gdk_pixbuf_get_width (gesture_icon),
                            gdk_pixbuf_get_height (gesture_icon));
           cairo_fill (cr);
 
-          /* release the stock abstract_icon */
+          /* release the stock abstract_icon & its surface */
           g_object_unref (G_OBJECT (gesture_icon));
+          cairo_surface_destroy (surface);
         }
     }