diff --git a/MagickCore/ImageMagick.pc b/MagickCore/ImageMagick.pc
index 7af081e..7ca1fc7 100644
--- a/MagickCore/ImageMagick.pc
+++ b/MagickCore/ImageMagick.pc
@@ -7,4 +7,4 @@
 Description: ImageMagick - Convert, Edit, and Compose Images
 Version: 7.0.0
 Libs: -L${libdir} -lMagickCore
-Cflags: -I${includedir} -fopenmp
+Cflags: -I${includedir} 
diff --git a/MagickCore/accelerate.c b/MagickCore/accelerate.c
index 144e8c4..772e30e 100644
--- a/MagickCore/accelerate.c
+++ b/MagickCore/accelerate.c
@@ -316,7 +316,7 @@
   (void) length;
   exception=(ExceptionInfo *) user_context;
   (void) ThrowMagickException(exception,GetMagickModule(),DelegateWarning,
-    "DelegateFailed","`%s'",message);
+    "DelegateFailed","'%s'",message);
 }
 
 static MagickBooleanType BindConvolveParameters(ConvolveInfo *convolve_info,
@@ -496,7 +496,7 @@
   if (convolve_info == (ConvolveInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return((ConvolveInfo *) NULL);
     }
   (void) ResetMagickMemory(convolve_info,0,sizeof(*convolve_info));
@@ -509,7 +509,7 @@
   if (status != CL_SUCCESS)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),DelegateWarning,
-        "failed to create OpenCL context","`%s' (%d)",image->filename,status);
+        "failed to create OpenCL context","'%s' (%d)",image->filename,status);
       convolve_info=DestroyConvolveInfo(convolve_info);
       return((ConvolveInfo *) NULL);
     }
@@ -527,7 +527,7 @@
   if ((convolve_info->context == (cl_context) NULL) || (status != CL_SUCCESS))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),DelegateWarning,
-        "failed to create OpenCL context","`%s' (%d)",image->filename,status);
+        "failed to create OpenCL context","'%s' (%d)",image->filename,status);
       convolve_info=DestroyConvolveInfo(convolve_info);
       return((ConvolveInfo *) NULL);
     }
@@ -545,7 +545,7 @@
   if (convolve_info->devices == (cl_device_id *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       convolve_info=DestroyConvolveInfo(convolve_info);
       return((ConvolveInfo *) NULL);
     }
@@ -630,7 +630,7 @@
       status=clGetProgramBuildInfo(convolve_info->program,
         convolve_info->devices[0],CL_PROGRAM_BUILD_LOG,length,log,&length);
       (void) ThrowMagickException(exception,GetMagickModule(),DelegateWarning,
-        "failed to build OpenCL program","`%s' (%s)",image->filename,log);
+        "failed to build OpenCL program","'%s' (%s)",image->filename,log);
       log=DestroyString(log);
       convolve_info=DestroyConvolveInfo(convolve_info);
       return((ConvolveInfo *) NULL);
@@ -703,7 +703,7 @@
       {
         convolve_info=DestroyConvolveInfo(convolve_info);
         (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-          "UnableToReadPixelCache","`%s'",image->filename);
+          "UnableToReadPixelCache","'%s'",image->filename);
         return(MagickFalse);
       }
     convolve_pixels=GetPixelCachePixels(convolve_image,&length,exception);
@@ -711,7 +711,7 @@
       {
         convolve_info=DestroyConvolveInfo(convolve_info);
         (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-          "UnableToReadPixelCache","`%s'",image->filename);
+          "UnableToReadPixelCache","'%s'",image->filename);
         return(MagickFalse);
       }
     filter=(float *) AcquireQuantumMemory(kernel->width,kernel->height*
@@ -721,7 +721,7 @@
         DestroyConvolveBuffers(convolve_info);
         convolve_info=DestroyConvolveInfo(convolve_info);
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
         return(MagickFalse);
       }
     for (i=0; i < (ssize_t) (kernel->width*kernel->height); i++)
diff --git a/MagickCore/animate.c b/MagickCore/animate.c
index 81ad3b2..68c6332 100644
--- a/MagickCore/animate.c
+++ b/MagickCore/animate.c
@@ -304,7 +304,7 @@
   if (display == (Display *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),XServerError,
-        "UnableToOpenXServer","`%s'",XDisplayName(image_info->server_name));
+        "UnableToOpenXServer","'%s'",XDisplayName(image_info->server_name));
       return(MagickFalse);
     }
   if (exception->severity != UndefinedException)
@@ -3038,7 +3038,7 @@
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
-    "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image->filename);
+    "DelegateLibrarySupportNotBuiltIn","'%s' (X11)",image->filename);
   return(MagickFalse);
 }
 #endif
diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c
index d61fb06..233edb7 100644
--- a/MagickCore/annotate.c
+++ b/MagickCore/annotate.c
@@ -889,7 +889,7 @@
       type_info=GetTypeInfo(draw_info->font,exception);
       if (type_info == (const TypeInfo *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),TypeWarning,
-          "UnableToReadFont","`%s'",draw_info->font);
+          "UnableToReadFont","'%s'",draw_info->font);
     }
   if ((type_info == (const TypeInfo *) NULL) &&
       (draw_info->family != (const char *) NULL))
@@ -898,7 +898,7 @@
         draw_info->stretch,draw_info->weight,exception);
       if (type_info == (const TypeInfo *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),TypeWarning,
-          "UnableToReadFont","`%s'",draw_info->family);
+          "UnableToReadFont","'%s'",draw_info->family);
     }
   if (type_info == (const TypeInfo *) NULL)
     type_info=GetTypeInfoByFamily("Arial",draw_info->style,
@@ -1147,7 +1147,7 @@
     {
       (void) FT_Done_FreeType(library);
       (void) ThrowMagickException(exception,GetMagickModule(),TypeError,
-        "UnableToReadFont","`%s'",draw_info->font);
+        "UnableToReadFont","'%s'",draw_info->font);
       return(RenderPostscript(image,draw_info,offset,metrics,exception));
     }
   if ((draw_info->metrics != (char *) NULL) &&
@@ -1552,7 +1552,7 @@
   TypeMetric *metrics,ExceptionInfo *exception)
 {
   (void) ThrowMagickException(exception,GetMagickModule(),
-    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (Freetype)",
+    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","'%s' (Freetype)",
     draw_info->font != (char *) NULL ? draw_info->font : "none");
   return(RenderPostscript(image,draw_info,offset,metrics,exception));
 }
@@ -2094,7 +2094,7 @@
   (void) offset;
   (void) metrics;
   (void) ThrowMagickException(exception,GetMagickModule(),
-    MissingDelegateError,"DelegateLibrarySupportNotBuiltIn","`%s' (X11)",
+    MissingDelegateError,"DelegateLibrarySupportNotBuiltIn","'%s' (X11)",
     image->filename);
   return(MagickFalse);
 }
diff --git a/MagickCore/attribute.c b/MagickCore/attribute.c
index 89f9abc..0274fd5 100644
--- a/MagickCore/attribute.c
+++ b/MagickCore/attribute.c
@@ -231,7 +231,7 @@
   image_view=DestroyCacheView(image_view);
   if ((bounds.width == 0) || (bounds.height == 0))
     (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-      "GeometryDoesNotContainImage","`%s'",image->filename);
+      "GeometryDoesNotContainImage","'%s'",image->filename);
   else
     {
       bounds.width-=(bounds.x-1);
diff --git a/MagickCore/blob.c b/MagickCore/blob.c
index 51fc9a9..99d1931 100644
--- a/MagickCore/blob.c
+++ b/MagickCore/blob.c
@@ -346,7 +346,7 @@
   if ((blob == (const void *) NULL) || (length == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),BlobError,
-        "ZeroLengthBlobNotPermitted","`%s'",image_info->filename);
+        "ZeroLengthBlobNotPermitted","'%s'",image_info->filename);
       return((Image *) NULL);
     }
   blob_info=CloneImageInfo(image_info);
@@ -359,7 +359,7 @@
     {
       blob_info=DestroyImageInfo(blob_info);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","`%s'",
+        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","'%s'",
         image_info->filename);
       return((Image *) NULL);
     }
@@ -983,7 +983,7 @@
       if (blob == (unsigned char *) NULL)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",filename);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",filename);
           return((unsigned char *) NULL);
         }
       if (file == -1)
@@ -1005,7 +1005,7 @@
     {
       file=close(file);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",filename);
       return((unsigned char *) NULL);
     }
   map=MapBlob(file,ReadMode,0,*length);
@@ -1496,7 +1496,7 @@
   if (magick_info == (const MagickInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","`%s'",
+        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","'%s'",
         image->filename);
       return(blob);
     }
@@ -1511,7 +1511,7 @@
         sizeof(unsigned char));
       if (blob_info->blob == (void *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       else
         {
           (void) CloseBlob(image);
@@ -1644,7 +1644,7 @@
     {
       file=close(file)-1;
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationError","`%s'",filename);
+        ResourceLimitError,"MemoryAllocationError","'%s'",filename);
       return(MagickFalse);
     }
   length=0;
@@ -1751,7 +1751,7 @@
   if (magick_info == (const MagickInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","`%s'",
+        MissingDelegateError,"NoDecodeDelegateForThisImageFormat","'%s'",
         images->filename);
       return(blob);
     }
@@ -1766,7 +1766,7 @@
         sizeof(unsigned char));
       if (blob_info->blob == (void *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",images->filename);
       else
         {
           images->blob->exempt=MagickTrue;
@@ -2366,7 +2366,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",filename);
+        "NotAuthorized","'%s'",filename);
       return(MagickFalse);
     }
   if ((LocaleCompare(filename,"-") == 0) ||
@@ -2677,7 +2677,7 @@
   if ((blob == (const void *) NULL) || (length == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),BlobError,
-        "UnrecognizedImageFormat","`%s'",image_info->magick);
+        "UnrecognizedImageFormat","'%s'",image_info->magick);
       return((Image *) NULL);
     }
   ping_info=CloneImageInfo(image_info);
@@ -2685,7 +2685,7 @@
   if (ping_info->blob == (const void *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitFatalError,"MemoryAllocationFailed","`%s'","");
+        ResourceLimitFatalError,"MemoryAllocationFailed","'%s'","");
       return((Image *) NULL);
     }
   (void) memcpy(ping_info->blob,blob,length);
diff --git a/MagickCore/cache.c b/MagickCore/cache.c
index 95fd4d5..663d0e5 100644
--- a/MagickCore/cache.c
+++ b/MagickCore/cache.c
@@ -633,7 +633,7 @@
   if (blob == (unsigned char *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         cache_info->filename);
       return(MagickFalse);
     }
@@ -801,7 +801,7 @@
   if (blob == (unsigned char *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         cache_info->filename);
       return(MagickFalse);
     }
@@ -3100,7 +3100,7 @@
       if (virtual_nexus != (NexusInfo **) NULL)
         virtual_nexus=DestroyPixelCacheNexus(virtual_nexus,1);
       (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-        "UnableToGetCacheNexus","`%s'",image->filename);
+        "UnableToGetCacheNexus","'%s'",image->filename);
       return((const Quantum *) NULL);
     }
   (void) ResetMagickMemory(virtual_pixel,0,cache_info->number_channels*
@@ -3130,7 +3130,7 @@
             {
               virtual_nexus=DestroyPixelCacheNexus(virtual_nexus,1);
               (void) ThrowMagickException(exception,GetMagickModule(),
-                CacheError,"UnableToGetCacheNexus","`%s'",image->filename);
+                CacheError,"UnableToGetCacheNexus","'%s'",image->filename);
               return((const Quantum *) NULL);
             }
           (void) ResetMagickMemory(virtual_metacontent,0,
@@ -3832,7 +3832,7 @@
   if (status == MagickFalse)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-        "CacheResourcesExhausted","`%s'",image->filename);
+        "CacheResourcesExhausted","'%s'",image->filename);
       return(MagickFalse);
     }
   if ((source_info.storage_class != UndefinedClass) && (mode != ReadMode))
@@ -4127,14 +4127,14 @@
   if ((cache_info->columns == 0) && (cache_info->rows == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-        "NoPixelsDefinedInCache","`%s'",image->filename);
+        "NoPixelsDefinedInCache","'%s'",image->filename);
       return((Quantum *) NULL);
     }
   if ((x < 0) || (y < 0) || (x >= (ssize_t) cache_info->columns) ||
       (y >= (ssize_t) cache_info->rows))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-        "PixelsAreNotAuthentic","`%s'",image->filename);
+        "PixelsAreNotAuthentic","'%s'",image->filename);
       return((Quantum *) NULL);
     }
   offset=(MagickOffsetType) y*cache_info->columns+x;
@@ -4741,7 +4741,7 @@
   if (nexus_info->cache == (Quantum *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         cache_info->filename);
       return(MagickFalse);
     }
diff --git a/MagickCore/channel.c b/MagickCore/channel.c
index ce0bc95..149df0b 100644
--- a/MagickCore/channel.c
+++ b/MagickCore/channel.c
@@ -302,7 +302,7 @@
     if (i < 0)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedChannelType","`%s'",token);
+          "UnrecognizedChannelType","'%s'",token);
         destination_image=DestroyImageList(destination_image);
         return(destination_image);
       }
@@ -341,7 +341,7 @@
         if (i < 0)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-              "UnrecognizedChannelType","`%s'",token);
+              "UnrecognizedChannelType","'%s'",token);
             destination_image=DestroyImageList(destination_image);
             return(destination_image);
           }
diff --git a/MagickCore/coder.c b/MagickCore/coder.c
index 5a97d23..df953a5 100644
--- a/MagickCore/coder.c
+++ b/MagickCore/coder.c
@@ -752,7 +752,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeNodeNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeNodeNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -800,7 +800,7 @@
           coder_info->magick),coder_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             coder_info->magick);
         coder_info=(CoderInfo *) NULL;
       }
@@ -918,7 +918,7 @@
     if (coder_info == (CoderInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",coder_info->name);
         continue;
       }
     (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info));
@@ -931,7 +931,7 @@
       coder_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",coder_info->name);
   }
   /*
     Load external coder map.
diff --git a/MagickCore/color.c b/MagickCore/color.c
index a1dff15..000fcc7 100644
--- a/MagickCore/color.c
+++ b/MagickCore/color.c
@@ -948,7 +948,7 @@
   }
   if (p == (ColorInfo *) NULL)
     (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-      "UnrecognizedColor","`%s'",name);
+      "UnrecognizedColor","'%s'",name);
   else
     (void) InsertValueInLinkedList(color_list,0,
       RemoveElementByValueFromLinkedList(color_list,p));
@@ -1896,7 +1896,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1943,7 +1943,7 @@
         status=AppendValueToLinkedList(color_list,color_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             color_info->name);
         color_info=(ColorInfo *) NULL;
       }
@@ -2076,7 +2076,7 @@
     if (color_info == (ColorInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",color_info->name);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",color_info->name);
         continue;
       }
     (void) ResetMagickMemory(color_info,0,sizeof(*color_info));
@@ -2093,7 +2093,7 @@
     status=AppendValueToLinkedList(color_list,color_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",color_info->name);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",color_info->name);
   }
   /*
     Load external color map.
@@ -2225,7 +2225,7 @@
           if ((n % 4) != 0)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                OptionWarning,"UnrecognizedColor","`%s'",name);
+                OptionWarning,"UnrecognizedColor","'%s'",name);
               return(MagickFalse);
             }
           do
@@ -2291,7 +2291,7 @@
       if (type < 0)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            OptionWarning,"UnrecognizedColor","`%s'",name);
+            OptionWarning,"UnrecognizedColor","'%s'",name);
           return(MagickFalse);
         }
       color->colorspace=(ColorspaceType) type;
diff --git a/MagickCore/colormap-private.h b/MagickCore/colormap-private.h
index 3a848ea..279fc8b 100644
--- a/MagickCore/colormap-private.h
+++ b/MagickCore/colormap-private.h
@@ -32,7 +32,7 @@
   if (index < image->colors)
     return((Quantum) index);
   (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-    "InvalidColormapIndex","`%s'",image->filename);
+    "InvalidColormapIndex","'%s'",image->filename);
   return((Quantum) 0);
 }
 
diff --git a/MagickCore/compare.c b/MagickCore/compare.c
index 09dcf9c..fefc1ac 100644
--- a/MagickCore/compare.c
+++ b/MagickCore/compare.c
@@ -1241,7 +1241,7 @@
       (reconstruct_image->rows != image->rows))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ImageSizeDiffers","`%s'",image->filename);
+        "ImageSizeDiffers","'%s'",image->filename);
       return((double *) NULL);
     }
   /*
@@ -1649,19 +1649,15 @@
       }
       q+=GetPixelChannels(similarity_image);
     }
-    if (SyncCacheViewAuthenticPixels(similarity_view,exception) == MagickFalse)
+    if (IfMagickFalse( SyncCacheViewAuthenticPixels(similarity_view,exception) ))
       status=MagickFalse;
     if (image->progress_monitor != (MagickProgressMonitor) NULL)
       {
-        MagickBooleanType
-          proceed;
-
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp critical (MagickCore_SimilarityImage)
 #endif
-        proceed=SetImageProgress(image,SimilarityImageTag,progress++,
-          image->rows);
-        if (proceed == MagickFalse)
+        if (IfMagickFalse( SetImageProgress(image,SimilarityImageTag,
+                 progress++,image->rows) ))
           status=MagickFalse;
       }
   }
diff --git a/MagickCore/compress.c b/MagickCore/compress.c
index 3de4ae6..0b099be 100644
--- a/MagickCore/compress.c
+++ b/MagickCore/compress.c
@@ -1305,7 +1305,7 @@
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
-    "DelegateLibrarySupportNotBuiltIn","`%s' (ZIP)",image->filename);
+    "DelegateLibrarySupportNotBuiltIn","'%s' (ZIP)",image->filename);
   return(MagickFalse);
 }
 #endif
diff --git a/MagickCore/configure.c b/MagickCore/configure.c
index da3a1ea..75ca67a 100644
--- a/MagickCore/configure.c
+++ b/MagickCore/configure.c
@@ -592,7 +592,7 @@
 #endif
   if (GetNumberOfElementsInLinkedList(options) == 0)
     (void) ThrowMagickException(exception,GetMagickModule(),ConfigureWarning,
-      "UnableToOpenConfigureFile","`%s'",filename);
+      "UnableToOpenConfigureFile","'%s'",filename);
   ResetLinkedListIterator(options);
   return(options);
 }
@@ -1079,7 +1079,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1127,7 +1127,7 @@
         status=AppendValueToLinkedList(configure_list,configure_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             configure_info->name);
         configure_info=(ConfigureInfo *) NULL;
       }
@@ -1248,7 +1248,7 @@
     if (configure_info == (ConfigureInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",
           configure_info->name);
         continue;
       }
@@ -1261,7 +1261,7 @@
     status=AppendValueToLinkedList(configure_list,configure_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         configure_info->name);
   }
   /*
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index bb46482..4cc6d52 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -458,7 +458,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",read_info->filename);
+        "NotAuthorized","'%s'",read_info->filename);
       return((Image *) NULL);
     }
   /*
@@ -537,7 +537,7 @@
       if (delegate_info == (const DelegateInfo *) NULL)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            MissingDelegateError,"NoDecodeDelegateForThisImageFormat","`%s'",
+            MissingDelegateError,"NoDecodeDelegateForThisImageFormat","'%s'",
             read_info->filename);
           if (read_info->temporary != MagickFalse)
             (void) RelinquishUniqueFileResource(read_info->filename);
@@ -571,7 +571,7 @@
         {
           if (IsPathAccessible(read_info->filename) != MagickFalse)
             (void) ThrowMagickException(exception,GetMagickModule(),
-              MissingDelegateError,"NoDecodeDelegateForThisImageFormat","`%s'",
+              MissingDelegateError,"NoDecodeDelegateForThisImageFormat","'%s'",
               read_info->filename);
           else
             ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
@@ -613,7 +613,7 @@
       clones=CloneImages(image,read_info->scenes,exception);
       if (clones == (Image *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "SubimageSpecificationReturnsNoImages","`%s'",read_info->filename);
+          "SubimageSpecificationReturnsNoImages","'%s'",read_info->filename);
       else
         {
           image=DestroyImageList(image);
@@ -1185,7 +1185,7 @@
           if ((magick_info == (const MagickInfo *) NULL) ||
               (GetImageEncoder(magick_info) == (EncodeImageHandler *) NULL))
             (void) ThrowMagickException(exception,GetMagickModule(),
-              MissingDelegateError,"NoEncodeDelegateForThisImageFormat","`%s'",
+              MissingDelegateError,"NoEncodeDelegateForThisImageFormat","'%s'",
               image->filename);
           else
             {
diff --git a/MagickCore/delegate.c b/MagickCore/delegate.c
index 3017c23..7753584 100644
--- a/MagickCore/delegate.c
+++ b/MagickCore/delegate.c
@@ -276,21 +276,21 @@
   if (delegate_info == (const DelegateInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),DelegateError,
-        "NoTagFound","`%s'",decode ? decode : encode);
+        "NoTagFound","'%s'",decode ? decode : encode);
       return((char *) NULL);
     }
   commands=StringToList(delegate_info->commands);
   if (commands == (char **) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         decode ? decode : encode);
       return((char *) NULL);
     }
   command=InterpretImageProperties(image_info,image,commands[0],exception);
   if (command == (char *) NULL)
     (void) ThrowMagickException(exception,GetMagickModule(),ResourceLimitError,
-      "MemoryAllocationFailed","`%s'",commands[0]);
+      "MemoryAllocationFailed","'%s'",commands[0]);
   /*
     Relinquish resources.
   */
@@ -862,14 +862,14 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",decode);
+        "NotAuthorized","'%s'",decode);
       return(MagickFalse);
     }
   if (IsRightsAuthorized(DelegatePolicyDomain,rights,encode) == MagickFalse)
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",encode);
+        "NotAuthorized","'%s'",encode);
       return(MagickFalse);
     }
   temporary=(*image->filename == '\0') ? MagickTrue : MagickFalse;
@@ -886,7 +886,7 @@
       if (temporary != MagickFalse)
         (void) RelinquishUniqueFileResource(image->filename);
       (void) ThrowMagickException(exception,GetMagickModule(),DelegateError,
-        "NoTagFound","`%s'",decode ? decode : encode);
+        "NoTagFound","'%s'",decode ? decode : encode);
       return(MagickFalse);
     }
   if (*image_info->filename == '\0')
@@ -940,7 +940,7 @@
           if (temporary != MagickFalse)
             (void) RelinquishUniqueFileResource(image->filename);
           (void) ThrowMagickException(exception,GetMagickModule(),
-            DelegateError,"DelegateFailed","`%s'",decode ? decode : encode);
+            DelegateError,"DelegateFailed","'%s'",decode ? decode : encode);
           return(MagickFalse);
         }
       LocaleUpper(magick);
@@ -971,7 +971,7 @@
               (void) RelinquishUniqueFileResource(image->filename);
             clone_info=DestroyImageInfo(clone_info);
             (void) ThrowMagickException(exception,GetMagickModule(),
-              DelegateError,"DelegateFailed","`%s'",decode ? decode : encode);
+              DelegateError,"DelegateFailed","'%s'",decode ? decode : encode);
             return(MagickFalse);
           }
         if (clone_info->adjoin != MagickFalse)
@@ -990,7 +990,7 @@
       if (temporary != MagickFalse)
         (void) RelinquishUniqueFileResource(image->filename);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         decode ? decode : encode);
       return(MagickFalse);
     }
@@ -1053,7 +1053,7 @@
     if (status != MagickFalse)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),DelegateError,
-          "DelegateFailed","`%s'",commands[i]);
+          "DelegateFailed","'%s'",commands[i]);
         break;
       }
     commands[i]=DestroyString(commands[i]);
@@ -1275,7 +1275,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1322,7 +1322,7 @@
         status=AppendValueToLinkedList(delegate_list,delegate_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             delegate_info->commands);
         delegate_info=(DelegateInfo *) NULL;
       }
diff --git a/MagickCore/display.c b/MagickCore/display.c
index 6e22d69..fafdb01 100644
--- a/MagickCore/display.c
+++ b/MagickCore/display.c
@@ -1680,7 +1680,7 @@
   if (display == (Display *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),XServerError,
-        "UnableToOpenXServer","`%s'",XDisplayName(image_info->server_name));
+        "UnableToOpenXServer","'%s'",XDisplayName(image_info->server_name));
       return(MagickFalse);
     }
   if (exception->severity != UndefinedException)
@@ -1758,7 +1758,7 @@
   if (display == (Display *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),XServerError,
-        "UnableToOpenXServer","`%s'",XDisplayName(image_info->server_name));
+        "UnableToOpenXServer","'%s'",XDisplayName(image_info->server_name));
       return(MagickFalse);
     }
   (void) XSetErrorHandler(XError);
@@ -5512,7 +5512,7 @@
   if (coordinate_info == (XPoint *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'","...");
+        ResourceLimitError,"MemoryAllocationFailed","'%s'","...");
       return(MagickFalse);
     }
   /*
@@ -6137,7 +6137,7 @@
             max_coordinates,sizeof(*coordinate_info));
           if (coordinate_info == (XPoint *) NULL)
             (void) ThrowMagickException(exception,GetMagickModule(),
-              ResourceLimitError,"MemoryAllocationFailed","`%s'","...");
+              ResourceLimitError,"MemoryAllocationFailed","'%s'","...");
           break;
         }
         case Expose:
@@ -6164,7 +6164,7 @@
             max_coordinates,sizeof(*coordinate_info));
           if (coordinate_info == (XPoint *) NULL)
             (void) ThrowMagickException(exception,GetMagickModule(),
-              ResourceLimitError,"MemoryAllocationFailed","`%s'","...");
+              ResourceLimitError,"MemoryAllocationFailed","'%s'","...");
           break;
         }
         default:
@@ -13309,7 +13309,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %  XTranslateImage() translates the image within an Image window by one pixel
-%  as specified by the key symbol.  If the image has a `montage string the
+%  as specified by the key symbol.  If the image has a montage string the
 %  translation is respect to the width and height contained within the string.
 %
 %  The format of the XTranslateImage method is:
@@ -16194,7 +16194,7 @@
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
-    "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image->filename);
+    "DelegateLibrarySupportNotBuiltIn","'%s' (X11)",image->filename);
   return(MagickFalse);
 }
 
@@ -16237,7 +16237,7 @@
   (void) window;
   (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename);
   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
-    "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image_info->filename);
+    "DelegateLibrarySupportNotBuiltIn","'%s' (X11)",image_info->filename);
   return(MagickFalse);
 }
 #endif
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index 21008fb..7c66969 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -2242,7 +2242,7 @@
                 if (n <= 0)
                   {
                     (void) ThrowMagickException(exception,GetMagickModule(),
-                      DrawError,"UnbalancedGraphicContextPushPop","`%s'",token);
+                      DrawError,"UnbalancedGraphicContextPushPop","'%s'",token);
                     n=0;
                     break;
                   }
@@ -2407,7 +2407,7 @@
                 if (graphic_context == (DrawInfo **) NULL)
                   {
                     (void) ThrowMagickException(exception,GetMagickModule(),
-                      ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                      ResourceLimitError,"MemoryAllocationFailed","'%s'",
                       image->filename);
                     break;
                   }
@@ -2550,7 +2550,7 @@
                 if (graphic_context[n]->dash_pattern == (double *) NULL)
                   {
                     (void) ThrowMagickException(exception,GetMagickModule(),
-                      ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                      ResourceLimitError,"MemoryAllocationFailed","'%s'",
                       image->filename);
                     break;
                   }
@@ -2782,7 +2782,7 @@
       if (primitive_info == (PrimitiveInfo *) NULL)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
           break;
         }
     }
@@ -2829,7 +2829,7 @@
       {
         if (primitive_info[j].coordinates > 107)
           (void) ThrowMagickException(exception,GetMagickModule(),DrawError,
-            "TooManyBezierCoordinates","`%s'",token);
+            "TooManyBezierCoordinates","'%s'",token);
         length=BezierQuantum*primitive_info[j].coordinates;
         break;
       }
@@ -2888,7 +2888,7 @@
         if (primitive_info == (PrimitiveInfo *) NULL)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),
-              ResourceLimitError,"MemoryAllocationFailed","`%s'",
+              ResourceLimitError,"MemoryAllocationFailed","'%s'",
               image->filename);
             break;
           }
diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c
index 0f85e58..ca2399d 100644
--- a/MagickCore/enhance.c
+++ b/MagickCore/enhance.c
@@ -965,11 +965,11 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %  ContrastStretchImage() is a simple image enhancement technique that attempts
-%  to improve the contrast in an image by `stretching' the range of intensity
+%  to improve the contrast in an image by 'stretching' the range of intensity
 %  values it contains to span a desired range of values. It differs from the
 %  more sophisticated histogram equalization in that it can only apply a
 %  linear scaling function to the image pixel values.  As a result the
-%  `enhancement' is less harsh.
+%  'enhancement' is less harsh.
 %
 %  The format of the ContrastStretchImage method is:
 %
diff --git a/MagickCore/exception-private.h b/MagickCore/exception-private.h
index f558eae..6376a2b 100644
--- a/MagickCore/exception-private.h
+++ b/MagickCore/exception-private.h
@@ -29,7 +29,7 @@
 { \
   if (image != (Image *) NULL) \
     (void) ThrowMagickException(exception,GetMagickModule(),severity, \
-      tag == (const char *) NULL ? "unknown" : tag,"`%s'",context); \
+      tag == (const char *) NULL ? "unknown" : tag,"'%s'",context); \
   return(MagickFalse); \
 }
 #define ThrowFatalException(severity,tag) \
@@ -43,7 +43,7 @@
   GetExceptionInfo(&exception); \
   message=GetExceptionMessage(errno); \
   (void) ThrowMagickException(&exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s'",message); \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s'",message); \
   message=DestroyString(message); \
   CatchException(&exception); \
   (void) DestroyExceptionInfo(&exception); \
@@ -56,19 +56,19 @@
  \
   message=GetExceptionMessage(errno); \
   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context,message); \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context,message); \
   message=DestroyString(message); \
 }
 #define ThrowImageException(severity,tag) \
 { \
   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s'",image->filename); \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s'",image->filename); \
   return((Image *) NULL); \
 }
 #define ThrowReaderException(severity,tag) \
 { \
   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s'",image_info->filename); \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s'",image_info->filename); \
   if ((image) != (Image *) NULL) \
     { \
       (void) CloseBlob(image); \
@@ -79,7 +79,7 @@
 #define ThrowWriterException(severity,tag) \
 { \
   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s'",image->filename); \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s'",image->filename); \
   if (image_info->adjoin != MagickFalse) \
     while (image->previous != (Image *) NULL) \
       image=image->previous; \
diff --git a/MagickCore/feature.c b/MagickCore/feature.c
index f48a7ee..39163a3 100644
--- a/MagickCore/feature.c
+++ b/MagickCore/feature.c
@@ -208,7 +208,7 @@
       channel_features=(ChannelFeatures *) RelinquishMagickMemory(
         channel_features);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(channel_features);
     }
   for (i=0; i <= (ssize_t) MaxMap; i++)
@@ -338,7 +338,7 @@
       channel_features=(ChannelFeatures *) RelinquishMagickMemory(
         channel_features);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(channel_features);
     }
   (void) ResetMagickMemory(&correlation,0,sizeof(correlation));
@@ -387,7 +387,7 @@
       channel_features=(ChannelFeatures *) RelinquishMagickMemory(
         channel_features);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(channel_features);
     }
   /*
@@ -520,7 +520,7 @@
       channel_features=(ChannelFeatures *) RelinquishMagickMemory(
         channel_features);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(channel_features);
     }
   /*
diff --git a/MagickCore/fourier.c b/MagickCore/fourier.c
index 8beebff..139ed4e 100644
--- a/MagickCore/fourier.c
+++ b/MagickCore/fourier.c
@@ -249,7 +249,7 @@
   if (phase_image == (Image *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "TwoOrMoreImagesRequired","`%s'",image->filename);
+        "TwoOrMoreImagesRequired","'%s'",image->filename);
       return(MagickFalse);
     }
   /*
@@ -266,7 +266,7 @@
   if (phase_source == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       magnitude_source=(double *) RelinquishMagickMemory(magnitude_source);
       return(MagickFalse);
     }
@@ -430,7 +430,7 @@
   if (source == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   ResetMagickMemory(source,0,fourier_info->height*fourier_info->width*
@@ -484,7 +484,7 @@
   if (fourier == (fftw_complex *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       source=(double *) RelinquishMagickMemory(source);
       return(MagickFalse);
     }
@@ -572,7 +572,7 @@
   if (magnitude == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   phase=(double *) AcquireQuantumMemory((size_t) fourier_info.height,
@@ -580,7 +580,7 @@
   if (phase == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       magnitude=(double *) RelinquishMagickMemory(magnitude);
       return(MagickFalse);
     }
@@ -589,7 +589,7 @@
   if (fourier == (fftw_complex *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       phase=(double *) RelinquishMagickMemory(phase);
       magnitude=(double *) RelinquishMagickMemory(magnitude);
       return(MagickFalse);
@@ -615,7 +615,7 @@
 #if !defined(MAGICKCORE_FFTW_DELEGATE)
   (void) modulus;
   (void) ThrowMagickException(exception,GetMagickModule(),
-    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (FFTW)",
+    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","'%s' (FFTW)",
     image->filename);
 #else
   {
@@ -837,7 +837,7 @@
   if (magnitude_source == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       return(MagickFalse);
     }
@@ -846,7 +846,7 @@
   if (phase_source == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       magnitude_source=(double *) RelinquishMagickMemory(magnitude_source);
       return(MagickFalse);
@@ -955,7 +955,7 @@
   if (magnitude == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       magnitude_source=(double *) RelinquishMagickMemory(magnitude_source);
       phase_source=(double *) RelinquishMagickMemory(phase_source);
@@ -969,7 +969,7 @@
   if (phase == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       phase_source=(double *) RelinquishMagickMemory(phase_source);
       return(MagickFalse);
@@ -1039,7 +1039,7 @@
   if (source == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
@@ -1142,7 +1142,7 @@
   if (magnitude == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       return(MagickFalse);
     }
@@ -1151,7 +1151,7 @@
   if (phase == (double *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       magnitude=(double *) RelinquishMagickMemory(magnitude);
       return(MagickFalse);
@@ -1161,7 +1161,7 @@
   if (fourier == (fftw_complex *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         magnitude_image->filename);
       phase=(double *) RelinquishMagickMemory(phase);
       magnitude=(double *) RelinquishMagickMemory(magnitude);
@@ -1194,14 +1194,14 @@
   if (phase_image == (Image *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "TwoOrMoreImagesRequired","`%s'",magnitude_image->filename);
+        "TwoOrMoreImagesRequired","'%s'",magnitude_image->filename);
       return((Image *) NULL);
     }
 #if !defined(MAGICKCORE_FFTW_DELEGATE)
   fourier_image=(Image *) NULL;
   (void) modulus;
   (void) ThrowMagickException(exception,GetMagickModule(),
-    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","`%s' (FFTW)",
+    MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn","'%s' (FFTW)",
     magnitude_image->filename);
 #else
   {
diff --git a/MagickCore/fx.c b/MagickCore/fx.c
index 3108551..a1fb3b2 100644
--- a/MagickCore/fx.c
+++ b/MagickCore/fx.c
@@ -1252,7 +1252,7 @@
   }
   if (*subexpression == '\0')
     (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-      "UnbalancedParenthesis","`%s'",expression);
+      "UnbalancedParenthesis","'%s'",expression);
   return(subexpression);
 }
 
@@ -1400,7 +1400,7 @@
   if (image == (Image *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "NoSuchImage","`%s'",expression);
+        "NoSuchImage","'%s'",expression);
       return(0.0);
     }
   GetPixelInfo(image,&pixel);
@@ -1467,7 +1467,7 @@
           if (image->colorspace != CMYKColorspace)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ImageError,"ColorSeparatedImageRequired","`%s'",
+                ImageError,"ColorSeparatedImageRequired","'%s'",
                 image->filename);
               return(0.0);
             }
@@ -1493,7 +1493,7 @@
           break;
       }
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "UnableToParseExpression","`%s'",p);
+        "UnableToParseExpression","'%s'",p);
       return(0.0);
     }
   switch (*symbol)
@@ -1625,7 +1625,7 @@
           if (image->colorspace != CMYKColorspace)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                OptionError,"ColorSeparatedImageRequired","`%s'",
+                OptionError,"ColorSeparatedImageRequired","'%s'",
                 image->filename);
               return(0.0);
             }
@@ -1815,7 +1815,7 @@
   if (value != (const char *) NULL)
     return((MagickRealType) StringToDouble(value,(char **) NULL));
   (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-    "UnableToParseExpression","`%s'",symbol);
+    "UnableToParseExpression","'%s'",symbol);
   return(0.0);
 }
 
@@ -2093,7 +2093,7 @@
   if (*expression == '\0')
     {
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "MissingExpression","`%s'",expression);
+        "MissingExpression","'%s'",expression);
       return(0.0);
     }
   *subexpression='\0';
@@ -2136,7 +2136,7 @@
             {
               if (exception->severity == UndefinedException)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  OptionError,"DivideByZero","`%s'",expression);
+                  OptionError,"DivideByZero","'%s'",expression);
               return(0.0);
             }
           return(alpha/(*beta));
@@ -2148,7 +2148,7 @@
           if (*beta == 0.0)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                OptionError,"DivideByZero","`%s'",expression);
+                OptionError,"DivideByZero","'%s'",expression);
               return(0.0);
             }
           return(fmod((double) alpha,(double) *beta));
@@ -2240,7 +2240,7 @@
           if (q == (char *) NULL)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                OptionError,"UnableToParseExpression","`%s'",subexpression);
+                OptionError,"UnableToParseExpression","'%s'",subexpression);
               return(0.0);
             }
           if (fabs((double) alpha) > MagickEpsilon)
@@ -2260,7 +2260,7 @@
           if (*q != '\0')
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                OptionError,"UnableToParseExpression","`%s'",subexpression);
+                OptionError,"UnableToParseExpression","'%s'",subexpression);
               return(0.0);
             }
           ClearMagickException(exception);
diff --git a/MagickCore/geometry.c b/MagickCore/geometry.c
index dba5c33..0a6f4dc 100644
--- a/MagickCore/geometry.c
+++ b/MagickCore/geometry.c
@@ -1042,7 +1042,7 @@
   if (flags == NoValue)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "InvalidGeometry","`%s'",geometry);
+        "InvalidGeometry","'%s'",geometry);
       return(flags);
     }
   if ((flags & PercentValue) != 0)
@@ -1333,7 +1333,7 @@
   if (flags == NoValue)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "InvalidGeometry","`%s'",geometry);
+        "InvalidGeometry","'%s'",geometry);
       return(flags);
     }
   if ((flags & PercentValue) != 0)
@@ -1390,7 +1390,7 @@
     &region_info->width,&region_info->height);
   if (flags == NoValue)
     (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-      "InvalidGeometry","`%s'",geometry);
+      "InvalidGeometry","'%s'",geometry);
   return(flags);
 }
 
diff --git a/MagickCore/histogram.c b/MagickCore/histogram.c
index 6a04abc..beb402e 100644
--- a/MagickCore/histogram.c
+++ b/MagickCore/histogram.c
@@ -219,7 +219,7 @@
   if (cube_info == (CubeInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(cube_info);
     }
   GetPixelInfo(image,&pixel);
@@ -247,7 +247,7 @@
             if (node_info->child[id] == (NodeInfo *) NULL)
               {
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                  ResourceLimitError,"MemoryAllocationFailed","'%s'",
                   image->filename);
                 return(0);
               }
@@ -274,7 +274,7 @@
           if (node_info->list == (PixelInfo *) NULL)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                ResourceLimitError,"MemoryAllocationFailed","'%s'",
                 image->filename);
               return(0);
             }
@@ -537,7 +537,7 @@
         sizeof(*histogram));
       if (histogram == (PixelInfo *) NULL)
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       else
         {
           PixelInfo
@@ -681,7 +681,7 @@
   if (cube_info == (CubeInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   GetPixelInfo(image,&pixel);
@@ -709,7 +709,7 @@
             if (node_info->child[id] == (NodeInfo *) NULL)
               {
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                  ResourceLimitError,"MemoryAllocationFailed","'%s'",
                   image->filename);
                 break;
               }
@@ -741,7 +741,7 @@
           if (node_info->list == (PixelInfo *) NULL)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                ResourceLimitError,"MemoryAllocationFailed","'%s'",
                 image->filename);
               break;
             }
@@ -841,7 +841,7 @@
   if (cube_info == (CubeInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   GetPixelInfo(image,&pixel);
@@ -869,7 +869,7 @@
             if (node_info->child[id] == (NodeInfo *) NULL)
               {
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                  ResourceLimitError,"MemoryAllocationFailed","'%s'",
                   image->filename);
                 break;
               }
@@ -901,7 +901,7 @@
           if (node_info->list == (PixelInfo *) NULL)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                ResourceLimitError,"MemoryAllocationFailed","'%s'",
                 image->filename);
               break;
             }
diff --git a/MagickCore/image.c b/MagickCore/image.c
index 93ae4fe..5e51c26 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -2532,10 +2532,10 @@
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  SetImageInfo() initializes the `magick' field of the ImageInfo structure.
+%  SetImageInfo() initializes the 'magick' field of the ImageInfo structure.
 %  It is set to a type of image format based on the prefix or suffix of the
-%  filename.  For example, `ps:image' returns PS indicating a Postscript image.
-%  JPEG is returned for this filename: `image.jpg'.  The filename prefix has
+%  filename.  For example, 'ps:image' returns PS indicating a Postscript image.
+%  JPEG is returned for this filename: 'image.jpg'.  The filename prefix has
 %  precendence over the suffix.  Use an optional index enclosed in brackets
 %  after a file name to specify a desired scene of a multi-resolution image
 %  format like Photo CD (e.g. img0001.pcd[4]).  A True (non-zero) return value
@@ -3757,7 +3757,7 @@
   image_view=DestroyCacheView(image_view);
   if (range_exception != MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-      "InvalidColormapIndex","`%s'",image->filename);
+      "InvalidColormapIndex","'%s'",image->filename);
   return(status);
 }
 
diff --git a/MagickCore/layer.c b/MagickCore/layer.c
index e87cc13..d80c2ca 100644
--- a/MagickCore/layer.c
+++ b/MagickCore/layer.c
@@ -1680,7 +1680,7 @@
     if ( i->delay != 0L ) break;
   if ( i == (Image *) NULL ) {
     (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-       "ZeroTimeAnimation","`%s'",GetFirstImageInList(*images)->filename);
+       "ZeroTimeAnimation","'%s'",GetFirstImageInList(*images)->filename);
     return;
   }
   i=GetFirstImageInList(*images);
diff --git a/MagickCore/list.c b/MagickCore/list.c
index 1cd6d5c..4240b24 100644
--- a/MagickCore/list.c
+++ b/MagickCore/list.c
@@ -371,7 +371,7 @@
   if (delete_list == (MagickBooleanType *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",(*images)->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",(*images)->filename);
       return;
     }
   image=(*images);
@@ -842,7 +842,7 @@
   if (group == (Image **) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",images->filename);
       return((Image **) NULL);
     }
   images=GetFirstImageInList(images);
diff --git a/MagickCore/locale.c b/MagickCore/locale.c
index 7164f5a..70ac21a 100644
--- a/MagickCore/locale.c
+++ b/MagickCore/locale.c
@@ -1168,7 +1168,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1256,7 +1256,7 @@
         status=AddValueToSplayTree(locale_list,locale_info->tag,locale_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             locale_info->tag);
         (void) ConcatenateMagickString(tag,message,MaxTextExtent);
         (void) ConcatenateMagickString(tag,"\n",MaxTextExtent);
diff --git a/MagickCore/log.c b/MagickCore/log.c
index 042ffba..07a7c9f 100644
--- a/MagickCore/log.c
+++ b/MagickCore/log.c
@@ -1354,7 +1354,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1402,7 +1402,7 @@
         status=AppendValueToLinkedList(log_list,log_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",filename);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",filename);
         log_info=(LogInfo *) NULL;
       }
     GetMagickToken(q,(const char **) NULL,token);
@@ -1563,7 +1563,7 @@
     if (log_info == (LogInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",log_info->name);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",log_info->name);
         continue;
       }
     (void) ResetMagickMemory(log_info,0,sizeof(*log_info));
@@ -1578,7 +1578,7 @@
     status=AppendValueToLinkedList(log_list,log_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",log_info->name);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",log_info->name);
   }
   /*
     Load external log map.
diff --git a/MagickCore/magic.c b/MagickCore/magic.c
index cfbfa56..f63573b 100644
--- a/MagickCore/magic.c
+++ b/MagickCore/magic.c
@@ -739,7 +739,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -786,7 +786,7 @@
         status=AppendValueToLinkedList(magic_list,magic_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             magic_info->name);
         magic_info=(MagicInfo *) NULL;
       }
@@ -966,7 +966,7 @@
     if (magic_info == (MagicInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",magic_info->name);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",magic_info->name);
         continue;
       }
     (void) ResetMagickMemory(magic_info,0,sizeof(*magic_info));
@@ -981,7 +981,7 @@
     status=AppendValueToLinkedList(magic_list,magic_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",magic_info->name);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",magic_info->name);
   }
   /*
     Load external magic map.
diff --git a/MagickCore/magick-type.h b/MagickCore/magick-type.h
index 97f2b9e..a036720 100644
--- a/MagickCore/magick-type.h
+++ b/MagickCore/magick-type.h
@@ -161,30 +161,34 @@
 
 /*
    Define some short-hand macros for handling MagickBooleanType
-   Some of these assume MagickBooleanType uses values 0 and 1,
    and uses fast C typing with C boolean operations
 
-     Is  -- returns MagickBooleanType
+     Is  -- returns a MagickBooleanType (for storage)
      If  -- returns C integer boolean (for if's and while's)
 
-   IsTrue()  converts a C integer boolean to a MagickBooleanType
-   IsFalse() is a  MagickBooleanType 'not' operation
+   IfMagickTrue()     converts MagickBooleanType to C integer Boolean
+   IfMagickFalse()    Not the MagickBooleanType to C integer Boolean
 
-   IfTrue()   converts MagickBooleanType to C integer Boolean
-   IfFalse()  Not the MagickBooleanType to C integer Boolean
+   IsMagickTrue()     converts a C integer boolean to a MagickBooleanType
+   IsMagickFalse()    converts and is also a MagickBooleanType 'not' operation
 
-   IsNULL() and IsNotNULL() converts C pointers to MagickBooleanType
+   IsMagickNULL()
+   IsMagickNotNULL()  converts C pointers tests MagickBooleanType
 */
 #if 1
-#  define IsMagickTrue(v)  ((MagickBooleanType)((int)(v)!= 0))
-#  define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
+/* Fast C typing method assumes MagickBooleanType uses match 0,1 values */
 #  define IfMagickTrue(v)  ((int)(v))
 #  define IfMagickFalse(v) (!(int)(v))
+#  define IsMagickTrue(v)  ((MagickBooleanType)((int)(v)!=0))
+#  define IsMagickFalse(v) ((MagickBooleanType)(!(int)(v)))
+#  define IsMagickNot(v)   ((MagickBooleanType)(!(int)(v)))
 #else
-#  define IsMagickTrue(v)  (((MagickBooleanType)(v))!=MagickFalse?MagickTrue:MagickFalse)
-#  define IsMagickFalse(v) (((MagickBooleanType)(v))==MagickFalse?MagickTrue:MagickFalse)
+/* Do not depend MagickBooleanValues */
 #  define IfMagickTrue(v)  ((v) != MagickFalse)
 #  define IfMagickFalse(v) ((v) == MagickFalse)
+#  define IsMagickTrue(v)  ((v)?MagickTrue:MagickFalse)
+#  define IsMagickFalse(v) ((v)?MagickFalse:MagickTrue)
+#  define IsMagickNot(v)   (IfMagickTrue(v)?MagickFalse:MagickTrue)
 #endif
 #define IfStringTrue(v)       IfMagickTrue(IsStringTrue(v))
 #define IfStringNotFalse(v)   IfMagickTrue(IsStringNotFalse(v))
diff --git a/MagickCore/mime.c b/MagickCore/mime.c
index 98acf07..b03a4fe 100644
--- a/MagickCore/mime.c
+++ b/MagickCore/mime.c
@@ -784,7 +784,7 @@
       {
         if (depth > 200)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ConfigureError,"IncludeElementNestedTooDeeply","`%s'",filename);
+            ConfigureError,"IncludeElementNestedTooDeeply","'%s'",filename);
         else
           {
             char
@@ -920,7 +920,7 @@
     status=AppendValueToLinkedList(mime_list,mime_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",filename);
     mime=GetNextXMLTreeTag(mime);
   }
   mime_map=DestroyXMLTree(mime_map);
diff --git a/MagickCore/module.c b/MagickCore/module.c
index d76e094..7b07864 100644
--- a/MagickCore/module.c
+++ b/MagickCore/module.c
@@ -510,7 +510,7 @@
   if (modules == (char **) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ConfigureError,
-        "MemoryAllocationFailed","`%s'",pattern);
+        "MemoryAllocationFailed","'%s'",pattern);
       return((char **) NULL);
     }
   qsort((void *) modules,(size_t) i,sizeof(*modules),ModuleCompare);
@@ -676,7 +676,7 @@
       if (key_value == (unsigned char *) NULL)
         {
           ThrowMagickException(exception,GetMagickModule(),ConfigureError,
-            "RegistryKeyLookupFailed","`%s'",registery_key);
+            "RegistryKeyLookupFailed","'%s'",registery_key);
           return(MagickFalse);
         }
       (void) FormatLocaleString(path,MaxTextExtent,"%s%s%s",(char *) key_value,
@@ -978,7 +978,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",tag);
+        "NotAuthorized","'%s'",tag);
       return(MagickFalse);
     }
   TagToFilterModuleName(tag,name);
@@ -986,7 +986,7 @@
   if (status == MagickFalse)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToLoadModule","`%s': %s",name,path);
+        "UnableToLoadModule","'%s': %s",name,path);
       return(MagickFalse);
     }
   /*
@@ -996,7 +996,7 @@
   if (handle == (ModuleHandle) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToLoadModule","`%s': %s",name,lt_dlerror());
+        "UnableToLoadModule","'%s': %s",name,lt_dlerror());
       return(MagickFalse);
     }
   /*
@@ -1015,7 +1015,7 @@
   image_filter=(ImageFilterHandler *) lt_dlsym(handle,name);
   if (image_filter == (ImageFilterHandler *) NULL)
     (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-      "UnableToLoadModule","`%s': %s",name,lt_dlerror());
+      "UnableToLoadModule","'%s': %s",name,lt_dlerror());
   else
     {
       size_t
@@ -1030,7 +1030,7 @@
           tag);
       if (signature != MagickImageFilterSignature)
         (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-          "ImageFilterSignatureMismatch","`%s': %8lx != %8lx",tag,
+          "ImageFilterSignatureMismatch","'%s': %8lx != %8lx",tag,
           (unsigned long) signature,(unsigned long) MagickImageFilterSignature);
     }
   /*
@@ -1038,7 +1038,7 @@
   */
   if (lt_dlclose(handle) != 0)
     (void) ThrowMagickException(exception,GetMagickModule(),ModuleWarning,
-      "UnableToCloseModule","`%s': %s",name,lt_dlerror());
+      "UnableToCloseModule","'%s': %s",name,lt_dlerror());
   return(exception->severity < ErrorException ? MagickTrue : MagickFalse);
 }
 
@@ -1281,7 +1281,7 @@
   if (handle == (ModuleHandle) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToLoadModule","`%s': %s",path,lt_dlerror());
+        "UnableToLoadModule","'%s': %s",path,lt_dlerror());
       return(MagickFalse);
     }
   /*
@@ -1299,7 +1299,7 @@
   if (module_info->register_module == (size_t (*)(void)) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToRegisterImageFormat","`%s': %s",module_name,lt_dlerror());
+        "UnableToRegisterImageFormat","'%s': %s",module_name,lt_dlerror());
       return(MagickFalse);
     }
   (void) LogMagickEvent(ModuleEvent,GetMagickModule(),
@@ -1313,7 +1313,7 @@
   if (module_info->unregister_module == (void (*)(void)) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToRegisterImageFormat","`%s': %s",module_name,lt_dlerror());
+        "UnableToRegisterImageFormat","'%s': %s",module_name,lt_dlerror());
       return(MagickFalse);
     }
   (void) LogMagickEvent(ModuleEvent,GetMagickModule(),
@@ -1323,7 +1323,7 @@
   if (signature != MagickImageCoderSignature)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "ImageCoderSignatureMismatch","`%s': %8lx != %8lx",module_name,
+        "ImageCoderSignatureMismatch","'%s': %8lx != %8lx",module_name,
         (unsigned long) signature,(unsigned long) MagickImageCoderSignature);
       return(MagickFalse);
     }
@@ -1424,7 +1424,7 @@
   status=AddValueToSplayTree(module_list,module_info->tag,module_info);
   if (status == MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),ResourceLimitError,
-      "MemoryAllocationFailed","`%s'",module_info->tag);
+      "MemoryAllocationFailed","'%s'",module_info->tag);
   return(module_info);
 }
 
@@ -1608,7 +1608,7 @@
   if (lt_dlclose((ModuleHandle) module_info->handle) != 0)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleWarning,
-        "UnableToCloseModule","`%s': %s",module_info->tag,lt_dlerror());
+        "UnableToCloseModule","'%s': %s",module_info->tag,lt_dlerror());
       return(MagickFalse);
     }
   return(MagickTrue);
@@ -1635,7 +1635,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",tag);
+        "NotAuthorized","'%s'",tag);
       return(MagickFalse);
     }
 #if defined(MAGICKCORE_BUILD_MODULES)
@@ -1656,7 +1656,7 @@
       image_filter=(ImageFilterHandler *) analyzeImage;
     if (image_filter == (ImageFilterHandler *) NULL)
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToLoadModule","`%s'",tag);
+        "UnableToLoadModule","'%s'",tag);
     else
       {
         size_t
@@ -1672,7 +1672,7 @@
         if (signature != MagickImageFilterSignature)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-              "ImageFilterSignatureMismatch","`%s': %8lx != %8lx",tag,
+              "ImageFilterSignatureMismatch","'%s': %8lx != %8lx",tag,
               (unsigned long) signature,(unsigned long)
               MagickImageFilterSignature);
             return(MagickFalse);
diff --git a/MagickCore/nt-feature.c b/MagickCore/nt-feature.c
index b180e66..d7cc8bc 100644
--- a/MagickCore/nt-feature.c
+++ b/MagickCore/nt-feature.c
@@ -544,7 +544,7 @@
           type_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",type_info->name);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",type_info->name);
       }
   }
   RegCloseKey ( reg_key );
@@ -619,7 +619,7 @@
 
       message=GetExceptionMessage(errno);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",message);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",message);
       message=DestroyString(message);
       return(NULL);
     }
@@ -652,7 +652,7 @@
 
       message=GetExceptionMessage(errno);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",message);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",message);
       message=DestroyString(message);
     }
   GlobalUnlock((HGLOBAL) bitmap_bitsH);
diff --git a/MagickCore/option.c b/MagickCore/option.c
index 9ce4032..89e8140 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -2191,8 +2191,11 @@
   if ((*option != '-') && (*option != '+'))
     return(MagickFalse);
   if (strlen(option) == 1)
-    return(MagickFalse);
+    return(IsMagickTrue( (*option == '{') || (*option == '}')
+                      || (*option == '[') || (*option == ']') ));
   option++;
+  if (*option == '-')
+    return(MagickTrue);
   if (isalpha((int) ((unsigned char) *option)) == 0)
     return(MagickFalse);
   return(MagickTrue);
diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c
index dc46381..e1dcc4b 100644
--- a/MagickCore/pixel.c
+++ b/MagickCore/pixel.c
@@ -1791,7 +1791,7 @@
   if (quantum_map == (QuantumType *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   for (i=0; i < (ssize_t) strlen(map); i++)
@@ -1818,7 +1818,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
+          "ColorSeparatedImageRequired","'%s'",map);
         return(MagickFalse);
       }
       case 'g':
@@ -1841,7 +1841,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
+          "ColorSeparatedImageRequired","'%s'",map);
         return(MagickFalse);
       }
       case 'M':
@@ -1852,7 +1852,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
+          "ColorSeparatedImageRequired","'%s'",map);
         return(MagickFalse);
       }
       case 'o':
@@ -1881,14 +1881,14 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",map);
+          "ColorSeparatedImageRequired","'%s'",map);
         return(MagickFalse);
       }
       default:
       {
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedPixelMap","`%s'",map);
+          "UnrecognizedPixelMap","'%s'",map);
         return(MagickFalse);
       }
     }
@@ -1938,7 +1938,7 @@
     {
       quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "UnrecognizedPixelMap","`%s'",map);
+        "UnrecognizedPixelMap","'%s'",map);
       break;
     }
   }
@@ -3801,7 +3801,7 @@
       {
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedPixelMap","`%s'",map);
+          "UnrecognizedPixelMap","'%s'",map);
         return(MagickFalse);
       }
     }
@@ -3856,7 +3856,7 @@
     {
       quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "UnrecognizedPixelMap","`%s'",map);
+        "UnrecognizedPixelMap","'%s'",map);
       break;
     }
   }
diff --git a/MagickCore/policy.c b/MagickCore/policy.c
index 6659e50..9962962 100644
--- a/MagickCore/policy.c
+++ b/MagickCore/policy.c
@@ -720,7 +720,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeElementNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeElementNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -767,7 +767,7 @@
         status=AppendValueToLinkedList(policy_list,policy_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",
             policy_info->name);
         policy_info=(PolicyInfo *) NULL;
       }
@@ -916,7 +916,7 @@
     if (policy_info == (PolicyInfo *) NULL)
       {
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",policy_info->name);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",policy_info->name);
         continue;
       }
     (void) ResetMagickMemory(policy_info,0,sizeof(*policy_info));
@@ -931,7 +931,7 @@
     status=AppendValueToLinkedList(policy_list,policy_info);
     if (status == MagickFalse)
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",policy_info->name);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",policy_info->name);
   }
   /*
     Load external policy map.
diff --git a/MagickCore/prepress.c b/MagickCore/prepress.c
index ed4ba4c..0559f6e 100644
--- a/MagickCore/prepress.c
+++ b/MagickCore/prepress.c
@@ -103,7 +103,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return(0.0);
     }
   status=MagickTrue;
diff --git a/MagickCore/profile.c b/MagickCore/profile.c
index 2b8b4e8..9bd8e57 100644
--- a/MagickCore/profile.c
+++ b/MagickCore/profile.c
@@ -456,14 +456,14 @@
   if (image == (Image *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageWarning,
-        "UnableToTransformColorspace","`%s'","unknown context");
+        "UnableToTransformColorspace","'%s'","unknown context");
       return;
     }
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%u, %s",
       severity,message != (char *) NULL ? message : "no message");
   (void) ThrowMagickException(exception,GetMagickModule(),ImageWarning,
-    "UnableToTransformColorspace","`%s'",image->filename);
+    "UnableToTransformColorspace","'%s'",image->filename);
 }
 #else
 static int CMSExceptionHandler(int severity,const char *message)
@@ -5765,7 +5765,7 @@
 #if !defined(MAGICKCORE_LCMS_DELEGATE)
       (void) ThrowMagickException(exception,GetMagickModule(),
         MissingDelegateWarning,"DelegateLibrarySupportNotBuiltIn",
-        "`%s' (LCMS)",image->filename);
+        "'%s' (LCMS)",image->filename);
 #else
       {
         cmsHPROFILE
diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c
index 3283b52..b52dbec 100644
--- a/MagickCore/quantize.c
+++ b/MagickCore/quantize.c
@@ -863,7 +863,7 @@
             node_info->child[id]=GetNodeInfo(cube_info,id,level,node_info);
             if (node_info->child[id] == (NodeInfo *) NULL)
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ResourceLimitError,"MemoryAllocationFailed","`%s'",
+                ResourceLimitError,"MemoryAllocationFailed","'%s'",
                 image->filename);
             if (level == MaxTreeDepth)
               cube_info->colors++;
@@ -2878,7 +2878,7 @@
   if (cube_info == (CubeInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",images->filename);
       return(MagickFalse);
     }
   number_images=GetImageListLength(images);
diff --git a/MagickCore/quantum-export.c b/MagickCore/quantum-export.c
index 1b0afda..4bd5300 100644
--- a/MagickCore/quantum-export.c
+++ b/MagickCore/quantum-export.c
@@ -889,7 +889,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1211,7 +1211,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1356,7 +1356,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -2087,7 +2087,7 @@
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -2254,7 +2254,7 @@
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
diff --git a/MagickCore/quantum-import.c b/MagickCore/quantum-import.c
index 65efe54..2c2154e 100644
--- a/MagickCore/quantum-import.c
+++ b/MagickCore/quantum-import.c
@@ -921,7 +921,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1249,7 +1249,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -1414,7 +1414,7 @@
   if (image->colorspace != CMYKColorspace)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColorSeparatedImageRequired","`%s'",image->filename);
+        "ColorSeparatedImageRequired","'%s'",image->filename);
       return;
     }
   switch (quantum_info->depth)
@@ -2233,7 +2233,7 @@
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
   range_exception=MagickFalse;
@@ -2420,7 +2420,7 @@
   }
   if (range_exception != MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-      "InvalidColormapIndex","`%s'",image->filename);
+      "InvalidColormapIndex","'%s'",image->filename);
 }
 
 static void ImportIndexAlphaQuantum(const Image *image,
@@ -2445,7 +2445,7 @@
   if (image->storage_class != PseudoClass)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-        "ColormappedImageRequired","`%s'",image->filename);
+        "ColormappedImageRequired","'%s'",image->filename);
       return;
     }
   range_exception=MagickFalse;
@@ -2637,7 +2637,7 @@
   }
   if (range_exception != MagickFalse)
     (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-      "InvalidColormapIndex","`%s'",image->filename);
+      "InvalidColormapIndex","'%s'",image->filename);
 }
 
 static void ImportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
diff --git a/MagickCore/registry.c b/MagickCore/registry.c
index c2f692b..dc97d71 100644
--- a/MagickCore/registry.c
+++ b/MagickCore/registry.c
@@ -203,7 +203,7 @@
   if (registry_info == (void *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),RegistryError,
-        "UnableToGetRegistryID","`%s'",key);
+        "UnableToGetRegistryID","'%s'",key);
       return((void *) NULL);
     }
   value=(void *) NULL;
diff --git a/MagickCore/resize.c b/MagickCore/resize.c
index f4eda5c..b1dd5fd 100644
--- a/MagickCore/resize.c
+++ b/MagickCore/resize.c
@@ -1870,7 +1870,7 @@
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
-    "DelegateLibrarySupportNotBuiltIn","`%s' (LQR)",image->filename);
+    "DelegateLibrarySupportNotBuiltIn","'%s' (LQR)",image->filename);
   return((Image *) NULL);
 }
 #endif
@@ -2179,7 +2179,7 @@
   if (contributions == (ContributionInfo **) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   status=MagickTrue;
@@ -2395,7 +2395,7 @@
   if (contributions == (ContributionInfo **) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   status=MagickTrue;
diff --git a/MagickCore/segment.c b/MagickCore/segment.c
index a3b0c68..bbee6bd 100644
--- a/MagickCore/segment.c
+++ b/MagickCore/segment.c
@@ -49,14 +49,14 @@
 %
 %    o For each histogram, successively apply the scale-space filter and
 %      build an interval tree of zero crossings in the second derivative
-%      at each scale.  Analyze this scale-space ``fingerprint'' to
+%      at each scale.  Analyze this scale-space ''fingerprint'' to
 %      determine which peaks and valleys in the histogram are most
 %      predominant.
 %
 %    o The fingerprint defines intervals on the axis of the histogram.
 %      Each interval contains either a minima or a maxima in the original
 %      signal.  If each color component lies within the maxima interval,
-%      that pixel is considered ``classified'' and is assigned an unique
+%      that pixel is considered ''classified'' and is assigned an unique
 %      class number.
 %
 %    o Any pixel that fails to be classified in the above thresholding
@@ -1002,7 +1002,7 @@
           histogram[i]=(ssize_t *) RelinquishMagickMemory(histogram[i]);
         }
         (void) ThrowMagickException(exception,GetMagickModule(),
-          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+          ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
         return(MagickFalse);
       }
   }
@@ -1049,7 +1049,7 @@
         if (cluster == (Cluster *) NULL)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),
-              ResourceLimitError,"MemoryAllocationFailed","`%s'",
+              ResourceLimitError,"MemoryAllocationFailed","'%s'",
               image->filename);
             return(MagickFalse);
           }
@@ -1073,7 +1073,7 @@
       if (cluster == (Cluster *) NULL)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
           return(MagickFalse);
         }
       /*
diff --git a/MagickCore/shear.c b/MagickCore/shear.c
index 488803c..7e568b7 100644
--- a/MagickCore/shear.c
+++ b/MagickCore/shear.c
@@ -345,7 +345,7 @@
       if (status == MagickFalse)
         {
           (void) ThrowMagickException(exception,GetMagickModule(),CacheError,
-            "CacheResourcesExhausted","`%s'",image->filename);
+            "CacheResourcesExhausted","'%s'",image->filename);
           return(DestroyRadonInfo(radon_info));
         }
       radon_info->type=DiskCache;
diff --git a/MagickCore/static.c b/MagickCore/static.c
index 7093dae..265da61 100644
--- a/MagickCore/static.c
+++ b/MagickCore/static.c
@@ -97,7 +97,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",tag);
+        "NotAuthorized","'%s'",tag);
       return(MagickFalse);
     }
 #if defined(MAGICKCORE_BUILD_MODULES)
@@ -118,7 +118,7 @@
       image_filter=(ImageFilterHandler *) analyzeImage;
     if (image_filter == (ImageFilterHandler *) NULL)
       (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-        "UnableToLoadModule","`%s'",tag);
+        "UnableToLoadModule","'%s'",tag);
     else
       {
         size_t
@@ -134,7 +134,7 @@
         if (signature != MagickImageFilterSignature)
           {
             (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
-              "ImageFilterSignatureMismatch","`%s': %8lx != %8lx",tag,
+              "ImageFilterSignatureMismatch","'%s': %8lx != %8lx",tag,
               (unsigned long) signature,(unsigned long)
               MagickImageFilterSignature);
             return(MagickFalse);
diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c
index 087cb49..99f194d 100644
--- a/MagickCore/statistic.c
+++ b/MagickCore/statistic.c
@@ -467,7 +467,7 @@
     if ((next->columns != images->columns) || (next->rows != images->rows))
       {
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "ImageWidthsOrHeightsDiffer","`%s'",images->filename);
+          "ImageWidthsOrHeightsDiffer","'%s'",images->filename);
         return((Image *) NULL);
       }
   /*
@@ -488,7 +488,7 @@
     {
       evaluate_image=DestroyImage(evaluate_image);
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",images->filename);
       return((Image *) NULL);
     }
   /*
diff --git a/MagickCore/stream.c b/MagickCore/stream.c
index 7fe25e7..cef10b0 100644
--- a/MagickCore/stream.c
+++ b/MagickCore/stream.c
@@ -700,7 +700,7 @@
   if (cache_info->pixels == (Quantum *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",
         cache_info->filename);
       return(MagickFalse);
     }
@@ -737,7 +737,7 @@
       (columns == 0) || (rows == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
-        "ImageDoesNotContainTheStreamGeometry","`%s'",image->filename);
+        "ImageDoesNotContainTheStreamGeometry","'%s'",image->filename);
       return((Quantum *) NULL);
     }
   cache_info=(CacheInfo *) image->cache;
@@ -875,14 +875,14 @@
       (columns == 0) || (rows == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
-        "ImageDoesNotContainTheStreamGeometry","`%s'",image->filename);
+        "ImageDoesNotContainTheStreamGeometry","'%s'",image->filename);
       return((Quantum *) NULL);
     }
   stream_handler=GetBlobStreamHandler(image);
   if (stream_handler == (StreamHandler) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
-        "NoStreamHandlerIsDefined","`%s'",image->filename);
+        "NoStreamHandlerIsDefined","'%s'",image->filename);
       return((Quantum *) NULL);
     }
   cache_info=(CacheInfo *) image->cache;
@@ -1310,7 +1310,7 @@
   if (quantum_map == (QuantumType *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),
-        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename);
       return(MagickFalse);
     }
   for (i=0; i < (ssize_t) length; i++)
@@ -1337,7 +1337,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",stream_info->map);
+          "ColorSeparatedImageRequired","'%s'",stream_info->map);
         return(MagickFalse);
       }
       case 'g':
@@ -1360,7 +1360,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",stream_info->map);
+          "ColorSeparatedImageRequired","'%s'",stream_info->map);
         return(MagickFalse);
       }
       case 'M':
@@ -1371,7 +1371,7 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",stream_info->map);
+          "ColorSeparatedImageRequired","'%s'",stream_info->map);
         return(MagickFalse);
       }
       case 'o':
@@ -1400,14 +1400,14 @@
           break;
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
-          "ColorSeparatedImageRequired","`%s'",stream_info->map);
+          "ColorSeparatedImageRequired","'%s'",stream_info->map);
         return(MagickFalse);
       }
       default:
       {
         quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
         (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-          "UnrecognizedPixelMap","`%s'",stream_info->map);
+          "UnrecognizedPixelMap","'%s'",stream_info->map);
         return(MagickFalse);
       }
     }
@@ -2624,7 +2624,7 @@
     {
       quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
-        "UnrecognizedPixelMap","`%s'",stream_info->map);
+        "UnrecognizedPixelMap","'%s'",stream_info->map);
       break;
     }
   }
@@ -2680,7 +2680,7 @@
   if (stream_handler == (StreamHandler) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
-        "NoStreamHandlerIsDefined","`%s'",image->filename);
+        "NoStreamHandlerIsDefined","'%s'",image->filename);
       return(MagickFalse);
     }
   length=stream_handler(image,cache_info->pixels,(size_t) cache_info->columns);
diff --git a/MagickCore/transform.c b/MagickCore/transform.c
index 190b18e..1ee8c21 100644
--- a/MagickCore/transform.c
+++ b/MagickCore/transform.c
@@ -506,7 +506,7 @@
         Crop is not within virtual canvas, return 1 pixel transparent image.
       */
       (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-        "GeometryDoesNotContainImage","`%s'",image->filename);
+        "GeometryDoesNotContainImage","'%s'",image->filename);
       crop_image=CloneImage(image,1,1,MagickTrue,exception);
       if (crop_image == (Image *) NULL)
         return((Image *) NULL);
@@ -556,7 +556,7 @@
   if ((page.width == 0) || (page.height == 0))
     {
       (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-        "GeometryDoesNotContainImage","`%s'",image->filename);
+        "GeometryDoesNotContainImage","'%s'",image->filename);
       return((Image *) NULL);
     }
   /*
diff --git a/MagickCore/type.c b/MagickCore/type.c
index 8e9d26c..b066c30 100644
--- a/MagickCore/type.c
+++ b/MagickCore/type.c
@@ -398,7 +398,7 @@
   if (type_info != (const TypeInfo *) NULL)
     {
       (void) ThrowMagickException(exception,GetMagickModule(),TypeError,
-        "FontSubstitutionRequired","`%s'",type_info->family);
+        "FontSubstitutionRequired","'%s'",type_info->family);
       return(type_info);
     }
   if (family != (const char *) NULL)
@@ -1026,7 +1026,7 @@
             {
               if (depth > 200)
                 (void) ThrowMagickException(exception,GetMagickModule(),
-                  ConfigureError,"IncludeNodeNestedTooDeeply","`%s'",token);
+                  ConfigureError,"IncludeNodeNestedTooDeeply","'%s'",token);
               else
                 {
                   char
@@ -1078,7 +1078,7 @@
         status=AddValueToSplayTree(type_list,type_info->name,type_info);
         if (status == MagickFalse)
           (void) ThrowMagickException(exception,GetMagickModule(),
-            ResourceLimitError,"MemoryAllocationFailed","`%s'",type_info->name);
+            ResourceLimitError,"MemoryAllocationFailed","'%s'",type_info->name);
         type_info=(TypeInfo *) NULL;
       }
     GetMagickToken(q,(const char **) NULL,token);
diff --git a/MagickCore/utility.c b/MagickCore/utility.c
index 57f35b3..0a43805 100644
--- a/MagickCore/utility.c
+++ b/MagickCore/utility.c
@@ -1782,7 +1782,7 @@
     {
       errno=EPERM;
       (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
-        "NotAuthorized","`%s'",arguments[1]);
+        "NotAuthorized","'%s'",arguments[1]);
       for (i=0; i < (ssize_t) number_arguments; i++)
         arguments[i]=DestroyString(arguments[i]);
       arguments=(char **) RelinquishMagickMemory(arguments);
@@ -1857,7 +1857,7 @@
 #endif
   if (status < 0)
     (void) ThrowMagickException(exception,GetMagickModule(),DelegateError,
-      "`%s' (%d)",command,status);
+      "'%s' (%d)",command,status);
   if (shell_command != command)
     shell_command=DestroyString(shell_command);
   for (i=0; i < (ssize_t) number_arguments; i++)
diff --git a/MagickCore/xml-tree.c b/MagickCore/xml-tree.c
index d695547..2f1b4a2 100644
--- a/MagickCore/xml-tree.c
+++ b/MagickCore/xml-tree.c
@@ -1809,7 +1809,7 @@
           if (attributes == (char **) NULL)
             {
               (void) ThrowMagickException(exception,GetMagickModule(),
-                ResourceLimitError,"MemoryAllocationFailed","`%s'","");
+                ResourceLimitError,"MemoryAllocationFailed","'%s'","");
               utf8=DestroyString(utf8);
               return(&root->root);
             }
@@ -2051,7 +2051,7 @@
       return(&root->root);
     }
   (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
-    "ParseError","unclosed tag: `%s'",root->node->tag);
+    "ParseError","unclosed tag: '%s'",root->node->tag);
   return(&root->root);
 }
 
diff --git a/MagickCore/xwindow-private.h b/MagickCore/xwindow-private.h
index eab3410..4428028 100644
--- a/MagickCore/xwindow-private.h
+++ b/MagickCore/xwindow-private.h
@@ -75,7 +75,7 @@
  \
   GetExceptionInfo(&exception); \
   (void) ThrowMagickException(&exception,GetMagickModule(),severity, \
-    tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context, \
+    tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context, \
     strerror(errno)); \
   CatchException(&exception); \
   (void) DestroyExceptionInfo(&exception); \
