diff --git a/Magick++/lib/Pixels.cpp b/Magick++/lib/Pixels.cpp
new file mode 100644
index 0000000..d9e8328
--- /dev/null
+++ b/Magick++/lib/Pixels.cpp
@@ -0,0 +1,125 @@
+// This may look like C code, but it is really -*- C++ -*-
+//
+// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
+//
+// Pixels Implementation
+//
+
+#define MAGICKCORE_IMPLEMENTATION  1
+#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
+
+#include "Magick++/Include.h"
+#include <string> // This is here to compile with Visual C++
+#include "Magick++/Thread.h"
+#include "Magick++/Exception.h"
+#include "Magick++/Pixels.h"
+
+namespace Magick
+{
+
+
+}
+
+// Construct pixel view using specified image.
+Magick::Pixels::Pixels( Magick::Image &image_ )
+  : _image(image_),
+    _view(AcquireCacheView(_image.image())),
+    _x(0),
+    _y(0),
+    _columns(0),
+    _rows(0)
+{
+  GetExceptionInfo( &_exception );
+
+  if (!_view)
+    _image.throwImageException();
+  (void) DestroyExceptionInfo( &_exception );
+}
+
+// Destroy pixel view
+Magick::Pixels::~Pixels( void )
+{
+  if ( _view )
+    _view = DestroyCacheView( _view );
+  
+}
+
+// Transfer pixels from the image to the pixel view as defined by
+// the specified region. Modified pixels may be subsequently
+// transferred back to the image via sync.
+Magick::PixelPacket* Magick::Pixels::get ( const int x_,
+					   const int y_,
+					   const unsigned int columns_,
+					   const unsigned int rows_ )
+{
+  _x = x_;
+  _y = y_;
+  _columns = columns_;
+  _rows = rows_;
+
+  PixelPacket* pixels = GetCacheViewAuthenticPixels( _view, x_, y_, columns_, rows_,  &_exception);
+
+  if ( !pixels )
+    throwException( *GetCacheViewException(_view) );
+  
+  return pixels;
+}
+
+// Transfer read-only pixels from the image to the pixel view as
+// defined by the specified region.
+const Magick::PixelPacket* Magick::Pixels::getConst ( const int x_, const int y_,
+                                                      const unsigned int columns_,
+                                                      const unsigned int rows_ )
+{
+  _x = x_;
+  _y = y_;
+  _columns = columns_;
+  _rows = rows_;
+
+  const PixelPacket* pixels =
+    GetCacheViewVirtualPixels(_view, x_, y_, columns_, rows_, &_exception );
+
+  if ( !pixels )
+    throwException( _exception );
+
+    return pixels;
+}
+
+// Transfers the image view pixels to the image.
+void Magick::Pixels::sync ( void )
+{
+  if( !SyncCacheViewAuthenticPixels( _view, &_exception ) )
+    throwException(  _exception );
+}
+    
+// Allocate a pixel view region to store image pixels as defined
+// by the region rectangle.  This area is subsequently transferred
+// from the pixel view to the image via 'sync'.
+Magick::PixelPacket* Magick::Pixels::set ( const int x_,
+					   const int y_,
+					   const unsigned int columns_,
+					   const unsigned int rows_ )
+{
+  _x = x_;
+  _y = y_;
+  _columns = columns_;
+  _rows = rows_;
+
+  PixelPacket* pixels = QueueCacheViewAuthenticPixels( _view, static_cast<long>(x_), static_cast<long>(y_),
+                                      columns_, rows_,  &_exception );
+  if ( !pixels )
+    throwException( _exception );
+  
+  return pixels;
+}
+
+// Return pixel colormap index array
+Magick::IndexPacket* Magick::Pixels::indexes ( void )
+{
+  IndexPacket* pixel_indexes = GetCacheViewAuthenticIndexQueue( _view );
+
+  if ( !pixel_indexes )
+    _image.throwImageException();
+
+  return pixel_indexes;
+}