diff --git a/vncviewer/CMakeLists.txt b/vncviewer/CMakeLists.txt
index faa1f75..12cd8ae 100644
--- a/vncviewer/CMakeLists.txt
+++ b/vncviewer/CMakeLists.txt
@@ -21,7 +21,9 @@
   set(VNCVIEWER_SOURCES ${VNCVIEWER_SOURCES} cocoa.mm)
 endif()
 
-if((NOT APPLE) AND (NOT WIN32))
+if(WIN32)
+  set(VNCVIEWER_SOURCES ${VNCVIEWER_SOURCES} Win32PixelBuffer.cxx)
+elseif(NOT APPLE)
   set(VNCVIEWER_SOURCES ${VNCVIEWER_SOURCES} X11PixelBuffer.cxx)
 endif()
 
diff --git a/vncviewer/Viewport.h b/vncviewer/Viewport.h
index 2613b6d..19b95a3 100644
--- a/vncviewer/Viewport.h
+++ b/vncviewer/Viewport.h
@@ -34,7 +34,7 @@
 #include <rfb/PixelTransformer.h>
 
 #if defined(WIN32)
-#include "PlatformPixelBuffer.h"
+#include "Win32PixelBuffer.h"
 #elif defined(__APPLE__)
 #include "PlatformPixelBuffer.h"
 #else
diff --git a/vncviewer/Win32PixelBuffer.cxx b/vncviewer/Win32PixelBuffer.cxx
new file mode 100644
index 0000000..e9f0e98
--- /dev/null
+++ b/vncviewer/Win32PixelBuffer.cxx
@@ -0,0 +1,96 @@
+/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+ * 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.
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <windows.h>
+
+#include <FL/x.H>
+
+#include <rfb/LogWriter.h>
+#include <rfb/Exception.h>
+
+#include "Win32PixelBuffer.h"
+
+using namespace rfb;
+
+static rfb::LogWriter vlog("PlatformPixelBuffer");
+
+struct BitmapInfo {
+  BITMAPINFOHEADER bmiHeader;
+  union {
+    struct {
+      DWORD red;
+      DWORD green;
+      DWORD blue;
+    } mask;
+    RGBQUAD color[256];
+  };
+};
+
+PlatformPixelBuffer::PlatformPixelBuffer(int width, int height) :
+  FullFramePixelBuffer(rfb::PixelFormat(32, 24, false, true,
+                                        255, 255, 255, 16, 8, 0),
+                       width, height, NULL, NULL),
+  bitmap(NULL)
+{
+  BITMAPINFOHEADER bih;
+
+  memset(&bih, 0, sizeof(bih));
+
+  bih.biSize         = sizeof(BITMAPINFOHEADER);
+  bih.biBitCount     = getPF().bpp;
+  bih.biSizeImage    = (getPF().bpp / 8) * width * height;
+  bih.biPlanes       = 1;
+  bih.biWidth        = width;
+  bih.biHeight       = -height; // Negative to get top-down
+  bih.biCompression  = BI_RGB;
+
+  bitmap = CreateDIBSection(NULL, (BITMAPINFO*)&bih,
+                            DIB_RGB_COLORS, (void**)&data, NULL, 0);
+  if (!bitmap) {
+    int err = GetLastError();
+    throw rdr::SystemException("unable to create DIB section", err);
+  }
+}
+
+
+PlatformPixelBuffer::~PlatformPixelBuffer()
+{
+  DeleteObject(bitmap);
+}
+
+
+void PlatformPixelBuffer::draw(int src_x, int src_y, int x, int y, int w, int h)
+{
+  HDC dc;
+
+  dc = CreateCompatibleDC(fl_gc);
+  if (!dc)
+    throw rdr::SystemException("CreateCompatibleDC failed", GetLastError());
+
+  if (!SelectObject(dc, bitmap))
+    throw rdr::SystemException("SelectObject failed", GetLastError());
+
+  if (!BitBlt(fl_gc, x, y, w, h, dc, src_x, src_y, SRCCOPY))
+    throw rdr::SystemException("BitBlt failed", GetLastError());
+
+  DeleteDC(dc);
+}
diff --git a/vncviewer/Win32PixelBuffer.h b/vncviewer/Win32PixelBuffer.h
new file mode 100644
index 0000000..ae2b71a
--- /dev/null
+++ b/vncviewer/Win32PixelBuffer.h
@@ -0,0 +1,36 @@
+/* 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 __WIN32PIXELBUFFER_H__
+#define __WIN32PIXELBUFFER_H__
+
+#include <rfb/PixelBuffer.h>
+
+class PlatformPixelBuffer: public rfb::FullFramePixelBuffer {
+public:
+  PlatformPixelBuffer(int width, int height);
+  ~PlatformPixelBuffer();
+
+  void draw(int src_x, int src_y, int x, int y, int w, int h);
+
+protected:
+  HBITMAP bitmap;
+};
+
+
+#endif
