diff --git a/vncviewer/PlatformPixelBuffer.h b/vncviewer/PlatformPixelBuffer.h
new file mode 100644
index 0000000..f634ccd
--- /dev/null
+++ b/vncviewer/PlatformPixelBuffer.h
@@ -0,0 +1,51 @@
+/* Copyright 2011 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ * 
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+#ifndef __PLATFORMPIXELBUFFER_H__
+#define __PLATFORMPIXELBUFFER_H__
+
+#include <rfb/PixelBuffer.h>
+
+#include <FL/fl_draw.H>
+
+class PlatformPixelBuffer: public rfb::ManagedPixelBuffer {
+public:
+  PlatformPixelBuffer(int width, int height) :
+    rfb::ManagedPixelBuffer(rfb::PixelFormat(32, 24, false, true,
+                                             255, 255, 255, 0, 8, 16),
+                            width, height)
+    {};
+
+  inline void draw(int src_x, int src_y, int x, int y, int w, int h);
+};
+
+inline void PlatformPixelBuffer::draw(int src_x, int src_y, int x, int y, int w, int h)
+{
+  int pixel_bytes, stride_bytes;
+  const uchar *buf_start;
+
+  pixel_bytes = getPF().bpp/8;
+  stride_bytes = pixel_bytes * getStride();
+  buf_start = data +
+              pixel_bytes * src_x +
+              stride_bytes * src_y;
+
+  fl_draw_image(buf_start, x, y, w, h, pixel_bytes, stride_bytes);
+}
+
+#endif
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index d3c21ed..139eb9a 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -73,7 +73,7 @@
   Fl::add_clipboard_notify(handleClipboardChange, this);
 #endif
 
-  frameBuffer = new ManagedPixelBuffer(getPreferredPF(), w, h);
+  frameBuffer = new PlatformPixelBuffer(w, h);
   assert(frameBuffer);
 
   setServerPF(serverPF);
@@ -143,9 +143,7 @@
 
 const rfb::PixelFormat &Viewport::getPreferredPF()
 {
-  static PixelFormat prefPF(32, 24, false, true, 255, 255, 255, 0, 8, 16);
-
-  return prefPF;
+  return frameBuffer->getPF();
 }
 
 
@@ -260,36 +258,26 @@
 {
   int X, Y, W, H;
 
-  int pixel_bytes, stride_bytes;
-  const uchar *buf_start;
-
   // Check what actually needs updating
   fl_clip_box(x(), y(), w(), h(), X, Y, W, H);
   if ((W == 0) || (H == 0))
     return;
 
-  pixel_bytes = frameBuffer->getPF().bpp/8;
-  stride_bytes = pixel_bytes * frameBuffer->getStride();
-  buf_start = frameBuffer->data +
-              pixel_bytes * (X - x()) +
-              stride_bytes * (Y - y());
-
-  // FIXME: Check how efficient this thing really is
-  fl_draw_image(buf_start, X, Y, W, H, pixel_bytes, stride_bytes);
+  frameBuffer->draw(X - x(), Y - y(), X, Y, W, H);
 }
 
 
 void Viewport::resize(int x, int y, int w, int h)
 {
-  rfb::ManagedPixelBuffer* newBuffer;
+  PlatformPixelBuffer* newBuffer;
   rfb::Rect rect;
 
-  // FIXME: Resize should probably be a feature of ManagedPixelBuffer
+  // FIXME: Resize should probably be a feature of the pixel buffer itself
 
   if ((w == frameBuffer->width()) && (h == frameBuffer->height()))
     goto end;
 
-  newBuffer = new ManagedPixelBuffer(frameBuffer->getPF(), w, h);
+  newBuffer = new PlatformPixelBuffer(w, h);
   assert(newBuffer);
 
   rect.setXYWH(0, 0,
diff --git a/vncviewer/Viewport.h b/vncviewer/Viewport.h
index b8f1a78..f385a24 100644
--- a/vncviewer/Viewport.h
+++ b/vncviewer/Viewport.h
@@ -33,6 +33,14 @@
 #include <rfb/PixelBuffer.h>
 #include <rfb/PixelTransformer.h>
 
+#if defined(WIN32)
+#include "PlatformPixelBuffer.h"
+#elif defined(__APPLE__)
+#include "PlatformPixelBuffer.h"
+#else
+#include "PlatformPixelBuffer.h"
+#endif
+
 class CConn;
 
 class Viewport : public Fl_Widget {
@@ -119,7 +127,7 @@
 private:
   CConn* cc;
 
-  rfb::ManagedPixelBuffer* frameBuffer;
+  PlatformPixelBuffer* frameBuffer;
 
   rfb::PixelTransformer *pixelTrans;
   rfb::SimpleColourMap colourMap;
