diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Application.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Application.java
index 6038106c94..5a8dd6452d 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Application.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Application.java
@@ -622,6 +622,7 @@ public final MenuItem createMenuItem(String title, MenuItem.Callback callback,
     }
 
     public abstract Pixels createPixels(int width, int height, ByteBuffer data);
+    public abstract Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley);
     public abstract Pixels createPixels(int width, int height, IntBuffer data);
     public abstract Pixels createPixels(int width, int height, IntBuffer data, float scalex, float scaley);
     protected abstract int staticPixels_getNativeFormat();
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Pixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Pixels.java
index 01163387f8..84653f2c53 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Pixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/Pixels.java
@@ -98,6 +98,20 @@ protected Pixels(final int width, final int height, final ByteBuffer pixels) {
         this.scaley = 1.0f;
     }
 
+    protected Pixels(final int width, final int height, final ByteBuffer pixels, float scalex, float scaley) {
+        this.width = width;
+        this.height = height;
+        this.bytesPerComponent = 1;
+        this.bytes = pixels.slice();
+        if ((this.width <= 0) || (this.height <= 0) || ((this.width * this.height * 4) > this.bytes.capacity())) {
+            throw new IllegalArgumentException("Too small byte buffer size "+this.width+"x"+this.height+" ["+(this.width*this.height*4)+"] > "+this.bytes.capacity());
+        }
+
+        this.ints = null;
+        this.scalex = scalex;
+        this.scaley = scaley;
+    }
+
     protected Pixels(final int width, final int height, IntBuffer pixels) {
         this.width = width;
         this.height = height;
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkApplication.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkApplication.java
index b5a7cecb9d..f0c9718751 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkApplication.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkApplication.java
@@ -411,6 +411,11 @@ public Pixels createPixels(int width, int height, ByteBuffer data) {
         return new GtkPixels(width, height, data);
     }
 
+    @Override
+    public Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        return new GtkPixels(width, height, data, scalex, scaley);
+    }
+
     @Override
     public Pixels createPixels(int width, int height, IntBuffer data) {
         return new GtkPixels(width, height, data);
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkPixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkPixels.java
index 0608cd2adc..9d22680e7d 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkPixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/GtkPixels.java
@@ -35,6 +35,10 @@ public GtkPixels(int width, int height, ByteBuffer data) {
         super(width, height, data);
     }
 
+    public GtkPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        super(width, height, data, scalex, scaley);
+    }
+
     public GtkPixels(int width, int height, IntBuffer data) {
         super(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosApplication.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosApplication.java
index a517e95d5e..c18231445b 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosApplication.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosApplication.java
@@ -120,6 +120,11 @@ public Pixels createPixels(int width, int height, ByteBuffer data) {
         return new IosPixels(width, height, data);
     }
 
+    @Override
+    public Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        return new IosPixels(width, height, data, scalex, scaley);
+    }
+
     /**
      * @inheritDoc
      */
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosPixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosPixels.java
index 5c04452bcd..be4918f921 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosPixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/ios/IosPixels.java
@@ -38,6 +38,10 @@ protected IosPixels(int width, int height, ByteBuffer data) {
         super(width, height, data);
     }
 
+    protected IosPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        super(width, height, data, scalex, scaley);
+    }
+
     protected IosPixels(int width, int height, IntBuffer data) {
         super(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacApplication.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacApplication.java
index 91fdde2663..91d98f5c11 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacApplication.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacApplication.java
@@ -271,6 +271,10 @@ public Menu getAppleMenu() {
         return new MacPixels(width, height, data);
     }
 
+    @Override public Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        return new MacPixels(width, height, data, scalex, scaley);
+    }
+
     @Override public Pixels createPixels(int width, int height, IntBuffer data) {
         return new MacPixels(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacPixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacPixels.java
index 00e2bab7d9..32a14b69a2 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacPixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacPixels.java
@@ -53,6 +53,10 @@ protected MacPixels(int width, int height, ByteBuffer data) {
         super(width, height, data);
     }
 
+    protected MacPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        super(width, height, data, scalex, scaley);
+    }
+
     protected MacPixels(int width, int height, IntBuffer data) {
         super(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonocleApplication.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonocleApplication.java
index b085682c19..3dff9b0243 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonocleApplication.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonocleApplication.java
@@ -187,15 +187,18 @@ public Pixels createPixels(int width, int height, ByteBuffer data) {
         return new MonoclePixels(width, height, data);
     }
 
+    @Override
+    public Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        return new MonoclePixels(width, height, data, scalex, scaley);
+    }
+
     @Override
     public Pixels createPixels(int width, int height, IntBuffer data) {
         return new MonoclePixels(width, height, data);
     }
 
     @Override
-    public Pixels createPixels(int width, int height, IntBuffer data,
-                               float scalex, float scaley)
-    {
+    public Pixels createPixels(int width, int height, IntBuffer data, float scalex, float scaley) {
         return new MonoclePixels(width, height, data, scalex, scaley);
     }
 
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonoclePixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonoclePixels.java
index bbb17ce1d7..5c4fee04b7 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonoclePixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/MonoclePixels.java
@@ -37,6 +37,10 @@ final class MonoclePixels extends Pixels {
         super(width, height, data);
     }
 
+    MonoclePixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        super(width, height, data, scalex, scaley);
+    }
+
     MonoclePixels(int width, int height, IntBuffer data) {
         super(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinApplication.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinApplication.java
index 73b9d8c95d..bdb5dc4ea0 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinApplication.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinApplication.java
@@ -253,6 +253,11 @@ protected void runLoop(final Runnable launchable) {
         return new WinPixels(width, height, data);
     }
 
+    @Override
+    public Pixels createPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        return new WinPixels(width, height, data, scalex, scaley);
+    }
+
     @Override public Pixels createPixels(int width, int height, IntBuffer data) {
         return new WinPixels(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinPixels.java b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinPixels.java
index 3c3497632d..fc313d939c 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinPixels.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinPixels.java
@@ -46,6 +46,10 @@ protected WinPixels(int width, int height, ByteBuffer data) {
         super(width, height, data);
     }
 
+    protected WinPixels(int width, int height, ByteBuffer data, float scalex, float scaley) {
+        super(width, height, data, scalex, scaley);
+    }
+
     protected WinPixels(int width, int height, IntBuffer data) {
         super(width, height, data);
     }
diff --git a/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/PixelUtils.java b/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/PixelUtils.java
index 9f2be5591d..6c8f987e34 100644
--- a/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/PixelUtils.java
+++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/PixelUtils.java
@@ -96,7 +96,10 @@ public static Pixels imageToPixels(Image image) {
                 throw new IllegalArgumentException("non-RGB image format");
             }
             pixels = app.createPixels(image.getWidth(),
-                                      image.getHeight(), bytes);
+                                      image.getHeight(),
+                                      bytes,
+                                      image.getPixelScale(),
+                                      image.getPixelScale());
             return pixels;
         } else if (pixelType == PixelFormat.DataType.INT) {
             if (ByteOrder.nativeOrder() != ByteOrder.LITTLE_ENDIAN) {
@@ -109,7 +112,10 @@ public static Pixels imageToPixels(Image image) {
              */
             IntBuffer ints = (IntBuffer)image.getPixelBuffer();
             pixels = app.createPixels(image.getWidth(),
-                                      image.getHeight(), ints);
+                                      image.getHeight(),
+                                      ints,
+                                      image.getPixelScale(),
+                                      image.getPixelScale());
             return pixels;
         } else {
             throw new IllegalArgumentException("unhandled image type: " + pixelType);
diff --git a/modules/javafx.graphics/src/main/native-glass/mac/GlassMenu.m b/modules/javafx.graphics/src/main/native-glass/mac/GlassMenu.m
index d26bca3792..776ca0f113 100644
--- a/modules/javafx.graphics/src/main/native-glass/mac/GlassMenu.m
+++ b/modules/javafx.graphics/src/main/native-glass/mac/GlassMenu.m
@@ -45,6 +45,10 @@
 static jmethodID jMenuClosedMethod = 0;
 static jmethodID jMenuValidateMethod = 0;
 static jfieldID  jDelegateMenuField = 0;
+static jfieldID  jPixelsWidthField = 0;
+static jfieldID  jPixelsHeightField = 0;
+static jfieldID  jPixelsScaleXField = 0;
+static jfieldID  jPixelsScaleYField = 0;
 
 @interface NSMenuItem (SPI)
 
@@ -262,6 +266,21 @@ - (void)_setPixels:(jobject)pixels
         (*env)->CallVoidMethod(env, pixels, jPixelsAttachData, ptr_to_jlong(&image));
         if (image != NULL)
         {
+            if (jPixelsWidthField
+                && jPixelsHeightField
+                && jPixelsScaleXField
+                && jPixelsScaleYField
+            ) {
+                jint width = (*env)->GetIntField(env, pixels, jPixelsWidthField);
+                jint height = (*env)->GetIntField(env, pixels, jPixelsHeightField);
+                jfloat scalex = (*env)->GetFloatField(env, pixels, jPixelsScaleXField);
+                jfloat scaley = (*env)->GetFloatField(env, pixels, jPixelsScaleYField);
+
+                if ((scalex > 1) && (scaley > 1) && (width > 0) && (height > 0)) {
+                    NSSize imgSize = {width / scalex, height / scaley};
+                    [image setSize: imgSize];
+                }
+            }
             [self->item setImage: image];
             [image release];
         }
@@ -375,7 +394,6 @@ - (void)_setPixels:(jobject)pixels
     if (!jMenuClass) {
         return;
     }
-
     jMenuActionMethod  = (*env)->GetMethodID(env, jCallbackClass,   "action",  "()V");
     if ((*env)->ExceptionCheck(env)) return;
     jMenuValidateMethod = (*env)->GetMethodID(env, jCallbackClass,   "validate",  "()V");
@@ -385,6 +403,19 @@ - (void)_setPixels:(jobject)pixels
     jMenuClosedMethod  = (*env)->GetMethodID(env, jMenuClass, "notifyMenuClosed",  "()V");
     if ((*env)->ExceptionCheck(env)) return;
     jDelegateMenuField = (*env)->GetFieldID(env,  jMenuDelegateClass, "menu", "Lcom/sun/glass/ui/Menu;");
+    if ((*env)->ExceptionCheck(env)) return;
+
+    jclass pixelsClass = [GlassHelper ClassForName:"com.sun.glass.ui.mac.MacPixels" withEnv: env];
+    if (!pixelsClass) {
+        return;
+    }
+    jPixelsWidthField = (*env)->GetFieldID(env, pixelsClass, "width", "I");
+    if ((*env)->ExceptionCheck(env)) return;
+    jPixelsHeightField = (*env)->GetFieldID(env, pixelsClass, "height", "I");
+    if ((*env)->ExceptionCheck(env)) return;
+    jPixelsScaleXField = (*env)->GetFieldID(env, pixelsClass, "scalex", "F");
+    if ((*env)->ExceptionCheck(env)) return;
+    jPixelsScaleYField = (*env)->GetFieldID(env, pixelsClass, "scaley", "F");
 }
 
 /*