--- a/src/screenshot-utils.c
+++ b/src/screenshot-utils.c
@@ -382,11 +382,12 @@
 screenshot_fallback_get_pixbuf (GdkRectangle *rectangle)
 {
   GdkWindow *root, *wm_window = NULL;
-  GdkPixbuf *screenshot;
+  GdkPixbuf *screenshot, *screenshot_scale;
   GdkRectangle real_coords, screenshot_coords;
   Window wm;
   GtkBorder frame_offset = { 0, 0, 0, 0 };
   GdkWindow *window;
+  gint scale_factor;
 
   window = screenshot_fallback_find_current_window ();
 
@@ -427,9 +428,15 @@
                                            screenshot_coords.x, screenshot_coords.y,
                                            screenshot_coords.width, screenshot_coords.height);
 
+  scale_factor = gdk_window_get_scale_factor (root);
+  screenshot_scale = gdk_pixbuf_scale_simple(screenshot,
+		  									 screenshot_coords.width * scale_factor,
+											 screenshot_coords.height * scale_factor,
+											 GDK_INTERP_BILINEAR);
+
   if (!screenshot_config->take_window_shot &&
       !screenshot_config->take_area_shot)
-    mask_monitors (screenshot, root);
+    mask_monitors (screenshot_scale, root);
 
 #ifdef HAVE_X11_EXTENSIONS_SHAPE_H
   if (screenshot_config->include_border && (wm != None))
@@ -448,7 +455,7 @@
                                         &rectangle_order);
       if (rectangles && rectangle_count > 0)
         {
-          gboolean has_alpha = gdk_pixbuf_get_has_alpha (screenshot);
+          gboolean has_alpha = gdk_pixbuf_get_has_alpha (screenshot_scale);
           
           tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
                                 screenshot_coords.width, screenshot_coords.height);
@@ -496,8 +503,8 @@
                   guchar *src_pixels, *dest_pixels;
                   gint x;
 
-                  src_pixels = gdk_pixbuf_get_pixels (screenshot)
-                             + y * gdk_pixbuf_get_rowstride(screenshot)
+                  src_pixels = gdk_pixbuf_get_pixels (screenshot_scale)
+                             + y * gdk_pixbuf_get_rowstride(screenshot_scale)
                              + rec_x * (has_alpha ? 4 : 3);
                   dest_pixels = gdk_pixbuf_get_pixels (tmp)
                               + y * gdk_pixbuf_get_rowstride (tmp)
@@ -517,8 +524,8 @@
                 }
             }
 
-          g_object_unref (screenshot);
-          screenshot = tmp;
+          g_object_unref (screenshot_scale);
+          screenshot_scale = tmp;
 
           XFree (rectangles);
         }
@@ -568,7 +575,7 @@
 
               cursor_x = cx - xhot - frame_offset.left;
               cursor_y = cy - yhot - frame_offset.top;
-              gdk_pixbuf_composite (cursor_pixbuf, screenshot,
+              gdk_pixbuf_composite (cursor_pixbuf, screenshot_scale,
                                     cursor_x, cursor_y,
                                     rect.width, rect.height,
                                     cursor_x, cursor_y,
@@ -584,7 +591,7 @@
 
   screenshot_fallback_fire_flash (window, rectangle);
 
-  return screenshot;
+  return screenshot_scale;
 }
 
 GdkPixbuf *
