diff --git a/Magick++/lib/Exception.cpp b/Magick++/lib/Exception.cpp
new file mode 100644
index 0000000..446a4e1
--- /dev/null
+++ b/Magick++/lib/Exception.cpp
@@ -0,0 +1,401 @@
+// This may look like C code, but it is really -*- C++ -*-
+//
+// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
+//
+// Implementation of Exception and derived classes
+//
+
+#define MAGICKCORE_IMPLEMENTATION  1
+#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
+
+#include "Magick++/Include.h"
+#include <string>
+#include <errno.h>
+#include <string.h>
+
+using namespace std;
+
+#include "Magick++/Exception.h"
+
+// Construct with message string
+Magick::Exception::Exception( const std::string& what_ )
+  : _what(what_)
+{
+}
+
+// Copy constructor
+Magick::Exception::Exception( const Magick::Exception& original_ )
+  : exception(original_), _what(original_._what)
+{
+}
+
+// Assignment operator
+Magick::Exception& Magick::Exception::operator= (const Magick::Exception& original_ )
+{
+  if(this != &original_)
+    {
+      this->_what = original_._what;
+    }
+  return *this;
+}
+
+// Return message string
+/*virtual*/ const char* Magick::Exception::what( ) const throw()
+{
+  return _what.c_str();
+}
+
+/* Destructor */
+/*virtual*/ Magick::Exception::~Exception ( ) throw ()
+{
+}
+
+//
+// Warnings
+//
+
+Magick::Warning::Warning ( const std::string& what_ )
+  : Exception(what_)
+{
+}
+
+Magick::WarningUndefined::WarningUndefined ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningBlob::WarningBlob ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningCache::WarningCache ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningCoder::WarningCoder ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningConfigure::WarningConfigure ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningCorruptImage::WarningCorruptImage ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningDelegate::WarningDelegate ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningDraw::WarningDraw ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningFileOpen::WarningFileOpen ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningImage::WarningImage ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningMissingDelegate::WarningMissingDelegate ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningModule::WarningModule ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningMonitor::WarningMonitor ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningOption::WarningOption ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningRegistry::WarningRegistry ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningResourceLimit::WarningResourceLimit ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningStream::WarningStream ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningType::WarningType ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+Magick::WarningXServer::WarningXServer ( const std::string& what_ )
+  : Warning(what_)
+{
+}
+
+//
+// Errors
+//
+
+Magick::Error::Error ( const std::string& what_ )
+  : Exception(what_)
+{
+}
+
+Magick::ErrorUndefined::ErrorUndefined ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorBlob::ErrorBlob ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorCache::ErrorCache ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorCoder::ErrorCoder ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorConfigure::ErrorConfigure ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorCorruptImage::ErrorCorruptImage ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorDelegate::ErrorDelegate ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorDraw::ErrorDraw ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorFileOpen::ErrorFileOpen ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorImage::ErrorImage ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorMissingDelegate::ErrorMissingDelegate ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorModule::ErrorModule ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorMonitor::ErrorMonitor ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorOption::ErrorOption ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorRegistry::ErrorRegistry ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorResourceLimit::ErrorResourceLimit ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorStream::ErrorStream ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorType::ErrorType ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+Magick::ErrorXServer::ErrorXServer ( const std::string& what_ )
+  : Error(what_)
+{
+}
+
+// Format and throw exception
+MagickDLLDecl void Magick::throwExceptionExplicit( const ExceptionType severity_,
+                                                   const char* reason_,
+                                                   const char* description_)
+{
+  // Just return if there is no reported error
+  if ( severity_ == UndefinedException )
+    return;
+
+  ExceptionInfo exception;
+
+  GetExceptionInfo( &exception );
+  ThrowException( &exception, severity_, reason_, description_ );
+  throwException( exception );
+  (void) DestroyExceptionInfo( &exception );
+}
+
+// Throw C++ exception
+MagickDLLDecl void Magick::throwException( ExceptionInfo &exception_ )
+{
+  // Just return if there is no reported error
+  if ( exception_.severity == UndefinedException )
+    return;
+
+  // Format error message ImageMagick-style
+  std::string message = SetClientName(0);
+  if ( exception_.reason != 0 )
+    {
+      message += std::string(": ");
+      message += std::string(exception_.reason);
+    }
+
+  if ( exception_.description != 0 )
+    message += " (" + std::string(exception_.description) + ")";
+
+  ExceptionType severity = exception_.severity;
+  MagickBooleanType relinquish = exception_.relinquish;
+  DestroyExceptionInfo( &exception_ );
+  if (relinquish)
+    GetExceptionInfo( &exception_ );
+
+  switch ( severity )
+    {
+      // Warnings
+    case ResourceLimitWarning :
+      throw WarningResourceLimit( message );
+    case TypeWarning :
+      throw WarningType( message );
+    case OptionWarning :
+      throw WarningOption( message );
+    case DelegateWarning :
+      throw WarningDelegate( message );
+    case MissingDelegateWarning :
+      throw WarningMissingDelegate( message );
+    case CorruptImageWarning :
+      throw WarningCorruptImage( message );
+    case FileOpenWarning :
+      throw WarningFileOpen( message );
+    case BlobWarning :
+      throw WarningBlob ( message );
+    case StreamWarning :
+      throw WarningStream ( message );
+    case CacheWarning :
+      throw WarningCache ( message );
+    case CoderWarning :
+      throw WarningCoder ( message );
+    case ModuleWarning :
+      throw WarningModule( message );
+    case DrawWarning :
+      throw WarningDraw( message );
+    case ImageWarning :
+      throw WarningImage( message );
+    case XServerWarning :
+      throw WarningXServer( message );
+    case MonitorWarning :
+      throw WarningMonitor( message );
+    case RegistryWarning :
+      throw WarningRegistry( message );
+    case ConfigureWarning :
+      throw WarningConfigure( message );
+      // Errors
+    case ResourceLimitError :
+    case ResourceLimitFatalError :
+      throw ErrorResourceLimit( message );
+    case TypeError :
+    case TypeFatalError :
+      throw ErrorType( message );
+    case OptionError :
+    case OptionFatalError :
+      throw ErrorOption( message );
+    case DelegateError :
+    case DelegateFatalError :
+      throw ErrorDelegate( message );
+    case MissingDelegateError :
+    case MissingDelegateFatalError :
+      throw ErrorMissingDelegate( message );
+    case CorruptImageError :
+    case CorruptImageFatalError :
+      throw ErrorCorruptImage( message );
+    case FileOpenError :
+    case FileOpenFatalError :
+      throw ErrorFileOpen( message );
+    case BlobError :
+    case BlobFatalError :
+      throw ErrorBlob ( message );
+    case StreamError :
+    case StreamFatalError :
+      throw ErrorStream ( message );
+    case CacheError :
+    case CacheFatalError :
+      throw ErrorCache ( message );
+    case CoderError :
+    case CoderFatalError :
+      throw ErrorCoder ( message );
+    case ModuleError :
+    case ModuleFatalError :
+      throw ErrorModule ( message );
+    case DrawError :
+    case DrawFatalError :
+      throw ErrorDraw ( message );
+    case ImageError :
+    case ImageFatalError :
+      throw ErrorImage ( message );
+    case XServerError :
+    case XServerFatalError :
+      throw ErrorXServer ( message );
+    case MonitorError :
+    case MonitorFatalError :
+      throw ErrorMonitor ( message );
+    case RegistryError :
+    case RegistryFatalError :
+      throw ErrorRegistry ( message );
+    case ConfigureError :
+    case ConfigureFatalError :
+      throw ErrorConfigure ( message );
+    case UndefinedException :
+    default :
+      throw ErrorUndefined( message );
+    }
+
+}