diff --git a/magick/cache.c b/magick/cache.c
index 48b2071..8b7068a 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -1579,13 +1579,13 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y C a c h e F a c i l i t y                                   %
++   D e s t r o y C a c h e C o m p o n e n t                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyCacheFaclity() destroys the cache facility.
+%  DestroyCacheFaclity() destroys the cache component.
 %
 %  The format of the DestroyCacheFaclity() method is:
 %
@@ -3674,20 +3674,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e C a c h e F a c i l i t y                           %
++   I n s t a n t i a t e C a c h e C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateCacheFacility() instantiates the cache facility.
+%  InstantiateCacheComponent() instantiates the cache component.
 %
-%  The format of the InstantiateCacheFacility method is:
+%  The format of the InstantiateCacheComponent method is:
 %
-%      MagickBooleanType InstantiateCacheFacility(void)
+%      MagickBooleanType InstantiateCacheComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateCacheFacility(void)
+MagickExport MagickBooleanType InstantiateCacheComponent(void)
 {
   AcquireSemaphoreInfo(&cache_semaphore);
   RelinquishSemaphoreInfo(cache_semaphore);
diff --git a/magick/cache.h b/magick/cache.h
index 69d6355..d9c8a9c 100644
--- a/magick/cache.h
+++ b/magick/cache.h
@@ -44,7 +44,7 @@
     const long,PixelPacket *,ExceptionInfo *),
   GetOneAuthenticPixel(Image *,const long,const long,PixelPacket *,
     ExceptionInfo *),
-  InstantiateCacheFacility(void),
+  InstantiateCacheComponent(void),
   PersistPixelCache(Image *,const char *,const MagickBooleanType,
     MagickOffsetType *,ExceptionInfo *),
   SyncAuthenticPixels(Image *,ExceptionInfo *);
diff --git a/magick/coder.c b/magick/coder.c
index 436b7f7..25c3b40 100644
--- a/magick/coder.c
+++ b/magick/coder.c
@@ -238,20 +238,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y C o d e r F a c i l i t y                                   %
++   D e s t r o y C o d e r C o m p o n e n t                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyCoderFacility() destroys the coder facility.
+%  DestroyCoderComponent() destroys the coder component.
 %
-%  The format of the DestroyCoderFacility method is:
+%  The format of the DestroyCoderComponent method is:
 %
-%      DestroyCoderFacility(void)
+%      DestroyCoderComponent(void)
 %
 */
-MagickExport void DestroyCoderFacility(void)
+MagickExport void DestroyCoderComponent(void)
 {
   AcquireSemaphoreInfo(&coder_semaphore);
   if (coder_list != (SplayTreeInfo *) NULL)
@@ -520,20 +520,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e C o d e r F a c i l i t y                           %
++   I n s t a n t i a t e C o d e r C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateCoderFacility() instantiates the coder facility.
+%  InstantiateCoderComponent() instantiates the coder component.
 %
-%  The format of the InstantiateCoderFacility method is:
+%  The format of the InstantiateCoderComponent method is:
 %
-%      MagickBooleanType InstantiateCoderFacility(void)
+%      MagickBooleanType InstantiateCoderComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateCoderFacility(void)
+MagickExport MagickBooleanType InstantiateCoderComponent(void)
 {
   AcquireSemaphoreInfo(&coder_semaphore);
   RelinquishSemaphoreInfo(coder_semaphore);
diff --git a/magick/coder.h b/magick/coder.h
index 6f35e21..71cf008 100644
--- a/magick/coder.h
+++ b/magick/coder.h
@@ -49,11 +49,11 @@
   **GetCoderInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateCoderFacility(void),
+  InstantiateCoderComponent(void),
   ListCoderInfo(FILE *,ExceptionInfo *);
 
 MagickExport void
-  DestroyCoderFacility(void);
+  DestroyCoderComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/color.c b/magick/color.c
index 8678dd9..7235e25 100644
--- a/magick/color.c
+++ b/magick/color.c
@@ -908,17 +908,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y C o l o r F a c i l i t y                                   %
++   D e s t r o y C o l o r C o m p o n e n t                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyColorFacility() destroys the color facility.
+%  DestroyColorComponent() destroys the color component.
 %
-%  The format of the DestroyColorFacility method is:
+%  The format of the DestroyColorComponent method is:
 %
-%      DestroyColorFacility(void)
+%      DestroyColorComponent(void)
 %
 */
 
@@ -939,7 +939,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyColorFacility(void)
+MagickExport void DestroyColorComponent(void)
 {
   AcquireSemaphoreInfo(&color_semaphore);
   if (color_list != (LinkedListInfo *) NULL)
@@ -1436,20 +1436,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e C o l o r F a c i l i t y                           %
++   I n s t a n t i a t e C o l o r C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateColorFacility() instantiates the color facility.
+%  InstantiateColorComponent() instantiates the color component.
 %
-%  The format of the InstantiateColorFacility method is:
+%  The format of the InstantiateColorComponent method is:
 %
-%      MagickBooleanType InstantiateColorFacility(void)
+%      MagickBooleanType InstantiateColorComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateColorFacility(void)
+MagickExport MagickBooleanType InstantiateColorComponent(void)
 {
   AcquireSemaphoreInfo(&color_semaphore);
   RelinquishSemaphoreInfo(color_semaphore);
diff --git a/magick/color.h b/magick/color.h
index 1c5191f..a501ffa 100644
--- a/magick/color.h
+++ b/magick/color.h
@@ -75,7 +75,7 @@
   **GetColorInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateColorFacility(void),
+  InstantiateColorComponent(void),
   IsColorSimilar(const Image *,const PixelPacket *,const PixelPacket *),
   IsGrayImage(const Image *,ExceptionInfo *),
   IsImageSimilar(const Image *,const Image *,long *x,long *y,ExceptionInfo *),
@@ -94,7 +94,7 @@
 extern MagickExport void
   ConcatenateColorComponent(const MagickPixelPacket *,const ChannelType,
     const ComplianceType,char *),
-  DestroyColorFacility(void),
+  DestroyColorComponent(void),
   GetColorTuple(const MagickPixelPacket *,const MagickBooleanType,char *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/magick/configure.c b/magick/configure.c
index e2e0f30..c58951d 100644
--- a/magick/configure.c
+++ b/magick/configure.c
@@ -90,17 +90,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y C o n f i g u r e F a c i l i t y                           %
++   D e s t r o y C o n f i g u r e C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyConfigureFacility() destroys the configure facility.
+%  DestroyConfigureComponent() destroys the configure component.
 %
-%  The format of the DestroyConfigureFacility method is:
+%  The format of the DestroyConfigureComponent method is:
 %
-%      DestroyConfigureFacility(void)
+%      DestroyConfigureComponent(void)
 %
 */
 
@@ -120,7 +120,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyConfigureFacility(void)
+MagickExport void DestroyConfigureComponent(void)
 {
   AcquireSemaphoreInfo(&configure_semaphore);
   if (configure_list != (LinkedListInfo *) NULL)
@@ -848,20 +848,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e C o n f i g u r e F a c i l i t y                   %
++   I n s t a n t i a t e C o n f i g u r e C o m p o n e n t                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateConfigureFacility() instantiates the configure facility.
+%  InstantiateConfigureComponent() instantiates the configure component.
 %
-%  The format of the InstantiateConfigureFacility method is:
+%  The format of the InstantiateConfigureComponent method is:
 %
-%      MagickBooleanType InstantiateConfigureFacility(void)
+%      MagickBooleanType InstantiateConfigureComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateConfigureFacility(void)
+MagickExport MagickBooleanType InstantiateConfigureComponent(void)
 {
   AcquireSemaphoreInfo(&configure_semaphore);
   RelinquishSemaphoreInfo(configure_semaphore);
diff --git a/magick/configure.h b/magick/configure.h
index f98a7d5..0be05da 100644
--- a/magick/configure.h
+++ b/magick/configure.h
@@ -59,11 +59,11 @@
   *GetConfigureOptions(const char *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateConfigureFacility(void),
+  InstantiateConfigureComponent(void),
   ListConfigureInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyConfigureFacility(void);
+  DestroyConfigureComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/constitute.c b/magick/constitute.c
index 6ac2a4a..44e83a3 100644
--- a/magick/constitute.c
+++ b/magick/constitute.c
@@ -163,20 +163,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y C o n s t i t u t e F a c i l i t y                         %
++   D e s t r o y C o n s t i t u t e C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyConstituteFacility() destroys the constitute facility.
+%  DestroyConstituteComponent() destroys the constitute component.
 %
-%  The format of the DestroyConstituteFacility method is:
+%  The format of the DestroyConstituteComponent method is:
 %
-%      DestroyConstituteFacility(void)
+%      DestroyConstituteComponent(void)
 %
 */
-MagickExport void DestroyConstituteFacility(void)
+MagickExport void DestroyConstituteComponent(void)
 {
   if (constitute_semaphore != (SemaphoreInfo *) NULL)
     DestroySemaphoreInfo(&constitute_semaphore);
@@ -187,20 +187,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e C o n s t i t u t e F a c i l i t y                 %
++   I n s t a n t i a t e C o n s t i t u t e C o m p o n e n t               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateConstituteFacility() instantiates the constitute facility.
+%  InstantiateConstituteComponent() instantiates the constitute component.
 %
-%  The format of the InstantiateConstituteFacility method is:
+%  The format of the InstantiateConstituteComponent method is:
 %
-%      MagickBooleanType InstantiateConstituteFacility(void)
+%      MagickBooleanType InstantiateConstituteComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateConstituteFacility(void)
+MagickExport MagickBooleanType InstantiateConstituteComponent(void)
 {
   AcquireSemaphoreInfo(&constitute_semaphore);
   RelinquishSemaphoreInfo(constitute_semaphore);
diff --git a/magick/constitute.h b/magick/constitute.h
index 5b8dc06..9118ea5 100644
--- a/magick/constitute.h
+++ b/magick/constitute.h
@@ -44,12 +44,12 @@
   *ReadInlineImage(const ImageInfo *,const char *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateConstituteFacility(void),
+  InstantiateConstituteComponent(void),
   WriteImage(const ImageInfo *,Image *),
   WriteImages(const ImageInfo *,Image *,const char *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyConstituteFacility(void);
+  DestroyConstituteComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/delegate.c b/magick/delegate.c
index 79a2ed8..f12b50a 100644
--- a/magick/delegate.c
+++ b/magick/delegate.c
@@ -149,17 +149,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   D e s t r o y D e l e g a t e F a c i l i t y                             %
+%   D e s t r o y D e l e g a t e C o m p o n e n t                           %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyDelegateFacility() destroys the delegate facility.
+%  DestroyDelegateComponent() destroys the delegate component.
 %
-%  The format of the DestroyDelegateFacility method is:
+%  The format of the DestroyDelegateComponent method is:
 %
-%      DestroyDelegateFacility(void)
+%      DestroyDelegateComponent(void)
 %
 */
 
@@ -182,7 +182,7 @@
 }
 
 
-MagickExport void DestroyDelegateFacility(void)
+MagickExport void DestroyDelegateComponent(void)
 {
   AcquireSemaphoreInfo(&delegate_semaphore);
   if (delegate_list != (LinkedListInfo *) NULL)
@@ -698,20 +698,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e D e l e g a t e F a c i l i t y                     %
++   I n s t a n t i a t e D e l e g a t e C o m p o n e n t                   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateDelegateFacility() instantiates the delegate facility.
+%  InstantiateDelegateComponent() instantiates the delegate component.
 %
-%  The format of the InstantiateDelegateFacility method is:
+%  The format of the InstantiateDelegateComponent method is:
 %
-%      MagickBooleanType InstantiateDelegateFacility(void)
+%      MagickBooleanType InstantiateDelegateComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateDelegateFacility(void)
+MagickExport MagickBooleanType InstantiateDelegateComponent(void)
 {
   AcquireSemaphoreInfo(&delegate_semaphore);
   RelinquishSemaphoreInfo(delegate_semaphore);
diff --git a/magick/delegate.h b/magick/delegate.h
index 9dbd221..cc68401 100644
--- a/magick/delegate.h
+++ b/magick/delegate.h
@@ -63,12 +63,12 @@
 
 extern MagickExport MagickBooleanType
   GetDelegateThreadSupport(const DelegateInfo *),
-  InstantiateDelegateFacility(void),
+  InstantiateDelegateComponent(void),
   InvokeDelegate(ImageInfo *,Image *,const char *,const char *,ExceptionInfo *),
   ListDelegateInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyDelegateFacility(void);
+  DestroyDelegateComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/deprecate.c b/magick/deprecate.c
index 2e09cca..761a447 100644
--- a/magick/deprecate.c
+++ b/magick/deprecate.c
@@ -1383,7 +1383,7 @@
 */
 MagickExport void DestroyMagickRegistry(void)
 {
-  DestroyRegistryFacility();
+  DestroyRegistryComponent();
 }
 
 /*
diff --git a/magick/locale.c b/magick/locale.c
index 291431a..b89fc24 100644
--- a/magick/locale.c
+++ b/magick/locale.c
@@ -98,20 +98,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y L o c a l e F a c i l i t y                                 %
++   D e s t r o y L o c a l e C o m p o n e n t                               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyLocaleFacility() destroys the locale facility.
+%  DestroyLocaleComponent() destroys the locale component.
 %
-%  The format of the DestroyLocaleFacility method is:
+%  The format of the DestroyLocaleComponent method is:
 %
-%      DestroyLocaleFacility(void)
+%      DestroyLocaleComponent(void)
 %
 */
-MagickExport void DestroyLocaleFacility(void)
+MagickExport void DestroyLocaleComponent(void)
 {
   AcquireSemaphoreInfo(&locale_semaphore);
   if (locale_list != (SplayTreeInfo *) NULL)
@@ -617,20 +617,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e L o c a l e F a c i l i t y                         %
++   I n s t a n t i a t e L o c a l e C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateLocaleFacility() instantiates the locale facility.
+%  InstantiateLocaleComponent() instantiates the locale component.
 %
-%  The format of the InstantiateLocaleFacility method is:
+%  The format of the InstantiateLocaleComponent method is:
 %
-%      MagickBooleanType InstantiateLocaleFacility(void)
+%      MagickBooleanType InstantiateLocaleComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateLocaleFacility(void)
+MagickExport MagickBooleanType InstantiateLocaleComponent(void)
 {
   AcquireSemaphoreInfo(&locale_semaphore);
   RelinquishSemaphoreInfo(locale_semaphore);
diff --git a/magick/locale_.h b/magick/locale_.h
index 0aff85b..de9f4ac 100644
--- a/magick/locale_.h
+++ b/magick/locale_.h
@@ -57,11 +57,11 @@
   *GetLocaleOptions(const char *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateLocaleFacility(void),
+  InstantiateLocaleComponent(void),
   ListLocaleInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyLocaleFacility(void);
+  DestroyLocaleComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/log.c b/magick/log.c
index 4c3a8fe..3d34351 100644
--- a/magick/log.c
+++ b/magick/log.c
@@ -233,17 +233,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y L o g F a c i l i t y                                       %
++   D e s t r o y L o g C o m p o n e n t                                     %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyLogFacility() destroys the logging facility.
+%  DestroyLogComponent() destroys the logging component.
 %
-%  The format of the DestroyLogFacility method is:
+%  The format of the DestroyLogComponent method is:
 %
-%      DestroyLogFacility(void)
+%      DestroyLogComponent(void)
 %
 */
 
@@ -270,7 +270,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyLogFacility(void)
+MagickExport void DestroyLogComponent(void)
 {
   AcquireSemaphoreInfo(&log_semaphore);
   if (log_list != (LinkedListInfo *) NULL)
@@ -591,20 +591,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e L o g F a c i l i t y                               %
++   I n s t a n t i a t e L o g C o m p o n e n t                             %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateLogFacility() instantiates the log facility.
+%  InstantiateLogComponent() instantiates the log component.
 %
-%  The format of the InstantiateLogFacility method is:
+%  The format of the InstantiateLogComponent method is:
 %
-%      MagickBooleanType InstantiateLogFacility(void)
+%      MagickBooleanType InstantiateLogComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateLogFacility(void)
+MagickExport MagickBooleanType InstantiateLogComponent(void)
 {
   AcquireSemaphoreInfo(&log_semaphore);
   RelinquishSemaphoreInfo(log_semaphore);
diff --git a/magick/log.h b/magick/log.h
index a30d475..fdd8e35 100644
--- a/magick/log.h
+++ b/magick/log.h
@@ -72,7 +72,7 @@
   SetLogEventMask(const char *);
 
 extern MagickExport MagickBooleanType
-  InstantiateLogFacility(void),
+  InstantiateLogComponent(void),
   IsEventLogging(void),
   ListLogInfo(FILE *,ExceptionInfo *),
   LogMagickEvent(const LogEventType,const char *,const char *,
@@ -84,7 +84,7 @@
 
 extern MagickExport void
   CloseMagickLog(void),
-  DestroyLogFacility(void),
+  DestroyLogComponent(void),
   SetLogFormat(const char *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/magick/magic.c b/magick/magic.c
index 434f96e..d5bd5f3 100644
--- a/magick/magic.c
+++ b/magick/magic.c
@@ -213,17 +213,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y M a g i c F a c i l i t y                                   %
++   D e s t r o y M a g i c C o m p o n e n t                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyMagicFacility() destroys the magic facility.
+%  DestroyMagicComponent() destroys the magic component.
 %
-%  The format of the DestroyMagicFacility method is:
+%  The format of the DestroyMagicComponent method is:
 %
-%      DestroyMagicFacility(void)
+%      DestroyMagicComponent(void)
 %
 */
 
@@ -248,7 +248,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyMagicFacility(void)
+MagickExport void DestroyMagicComponent(void)
 {
   AcquireSemaphoreInfo(&magic_semaphore);
   if (magic_list != (LinkedListInfo *) NULL)
@@ -588,20 +588,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e M a g i c F a c i l i t y                           %
++   I n s t a n t i a t e M a g i c C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateMagicFacility() instantiates the magic facility.
+%  InstantiateMagicComponent() instantiates the magic component.
 %
-%  The format of the InstantiateMagicFacility method is:
+%  The format of the InstantiateMagicComponent method is:
 %
-%      MagickBooleanType InstantiateMagicFacility(void)
+%      MagickBooleanType InstantiateMagicComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateMagicFacility(void)
+MagickExport MagickBooleanType InstantiateMagicComponent(void)
 {
   AcquireSemaphoreInfo(&magic_semaphore);
   RelinquishSemaphoreInfo(magic_semaphore);
diff --git a/magick/magic.h b/magick/magic.h
index 53e6796..4b86dab 100644
--- a/magick/magic.h
+++ b/magick/magic.h
@@ -57,7 +57,7 @@
   *GetMagicName(const MagicInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateMagicFacility(void),
+  InstantiateMagicComponent(void),
   ListMagicInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport const MagicInfo
@@ -65,7 +65,7 @@
   **GetMagicInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyMagicFacility(void);
+  DestroyMagicComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/magick-config.h b/magick/magick-config.h
index 489fde9..69046ce 100644
--- a/magick/magick-config.h
+++ b/magick/magick-config.h
@@ -905,7 +905,7 @@
 /* Define to 1 if you have the <windows.h> header file. */
 /* #undef HAVE_WINDOWS_H */
 
-/* This value is set to 1 to indicate that the system argz facility works */
+/* This value is set to 1 to indicate that the system argz component works */
 #ifndef MAGICKCORE_HAVE_WORKING_ARGZ 
 #define MAGICKCORE_HAVE_WORKING_ARGZ  1 
 #endif
diff --git a/magick/magick.c b/magick/magick.c
index 23376be..a8e7332 100644
--- a/magick/magick.c
+++ b/magick/magick.c
@@ -124,20 +124,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y M a g i c k F a c i l i t y                                 %
++   D e s t r o y M a g i c k C o m p o n e n t                               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyMagickFacility() destroys the magick facility.
+%  DestroyMagickComponent() destroys the magick component.
 %
-%  The format of the DestroyMagickFacility method is:
+%  The format of the DestroyMagickComponent method is:
 %
-%      void DestroyMagickFacility(void)
+%      void DestroyMagickComponent(void)
 %
 */
-MagickExport void DestroyMagickFacility(void)
+MagickExport void DestroyMagickComponent(void)
 {
   AcquireSemaphoreInfo(&magick_semaphore);
   if (magick_list != (SplayTreeInfo *) NULL)
@@ -861,20 +861,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e M a g i c k F a c i l i t y                         %
++   I n s t a n t i a t e M a g i c k C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateMagickFacility() instantiates the magick facility.
+%  InstantiateMagickComponent() instantiates the magick component.
 %
-%  The format of the InstantiateMagickFacility method is:
+%  The format of the InstantiateMagickComponent method is:
 %
-%      MagickBooleanType InstantiateMagickFacility(void)
+%      MagickBooleanType InstantiateMagickComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateMagickFacility(void)
+MagickExport MagickBooleanType InstantiateMagickComponent(void)
 {
   AcquireSemaphoreInfo(&magick_semaphore);
   RelinquishSemaphoreInfo(magick_semaphore);
@@ -1133,7 +1133,7 @@
 #if !defined(MAGICKCORE_HAVE_SIGACTION)
   (void) signal(signal_number,SIG_IGN);
 #endif
-  AsynchronousDestroyResourceFacility();
+  AsynchronousDestroyResourceComponent();
   instantiate_magick=MagickFalse;
   (void) SetMagickSignalHandler(signal_number,signal_handlers[signal_number]);
 #if defined(MAGICKCORE_HAVE_RAISE)
@@ -1194,10 +1194,10 @@
   */
   (void) setlocale(LC_ALL,"");
   (void) setlocale(LC_NUMERIC,"C");
-  (void) InstantiateSemaphoreFacility();
-  (void) InstantiateLogFacility();
-  (void) InstantiateLocaleFacility();
-  (void) InstantiateRandomFacility();
+  (void) InstantiateSemaphoreComponent();
+  (void) InstantiateLogComponent();
+  (void) InstantiateLocaleComponent();
+  (void) InstantiateRandomComponent();
   seconds=time((time_t *) NULL);
   events=GetEnvironmentValue("MAGICK_DEBUG");
   if (events != (char *) NULL)
@@ -1274,26 +1274,26 @@
   /*
     Initialize magick resources.
   */
-  (void) InstantiatePolicyFacility();
-  (void) InstantiateCacheFacility();
-  (void) InstantiateRegistryFacility();
-  (void) InstantiateResourcesFacility();
-  (void) InstantiateCoderFacility();
-  (void) InstantiateMagickFacility();
-  (void) InstantiateModuleFacility();
-  (void) InstantiateDelegateFacility();
-  (void) InstantiateMagicFacility();
-  (void) InstantiateColorFacility();
-  (void) InstantiateTypeFacility();
-  (void) InstantiateConfigureFacility();
-  (void) InstantiateMimeFacility();
-  (void) InstantiateConstituteFacility();
+  (void) InstantiatePolicyComponent();
+  (void) InstantiateCacheComponent();
+  (void) InstantiateRegistryComponent();
+  (void) InstantiateResourcesComponent();
+  (void) InstantiateCoderComponent();
+  (void) InstantiateMagickComponent();
+  (void) InstantiateModuleComponent();
+  (void) InstantiateDelegateComponent();
+  (void) InstantiateMagicComponent();
+  (void) InstantiateColorComponent();
+  (void) InstantiateTypeComponent();
+  (void) InstantiateConfigureComponent();
+  (void) InstantiateMimeComponent();
+  (void) InstantiateConstituteComponent();
   exception=AcquireExceptionInfo();
 #if defined(MAGICKCORE_MODULES_SUPPORT)
   InitializeModuleList(exception);
 #endif
   exception=DestroyExceptionInfo(exception);
-  (void) InstantiateLogFacility();
+  (void) InstantiateLogComponent();
 }
 
 /*
@@ -1319,26 +1319,26 @@
 #if defined(MAGICKCORE_X11_DELEGATE)
   DestroyXResources();
 #endif
-  DestroyConstituteFacility();
-  DestroyMimeFacility();
-  DestroyConfigureFacility();
-  DestroyTypeFacility();
-  DestroyColorFacility();
+  DestroyConstituteComponent();
+  DestroyMimeComponent();
+  DestroyConfigureComponent();
+  DestroyTypeComponent();
+  DestroyColorComponent();
 #if defined(__WINDOWS__)
   NTGhostscriptUnLoadDLL();
 #endif
-  DestroyMagicFacility();
-  DestroyDelegateFacility();
-  DestroyMagickFacility();
-  DestroyCoderFacility();
-  DestroyResourceFacility();
-  DestroyRegistryFacility();
+  DestroyMagicComponent();
+  DestroyDelegateComponent();
+  DestroyMagickComponent();
+  DestroyCoderComponent();
+  DestroyResourceComponent();
+  DestroyRegistryComponent();
   DestroyCacheFaclity();
-  DestroyPolicyFacility();
-  DestroyRandomFacility();
-  DestroyLocaleFacility();
-  DestroyLogFacility();
-  DestroySemaphoreFacility();
+  DestroyPolicyComponent();
+  DestroyRandomComponent();
+  DestroyLocaleComponent();
+  DestroyLogComponent();
+  DestroySemaphoreComponent();
   instantiate_magick=MagickFalse;
 }
 
diff --git a/magick/magick.h b/magick/magick.h
index 382b5ef..39bccc7 100644
--- a/magick/magick.h
+++ b/magick/magick.h
@@ -112,7 +112,7 @@
   GetMagickEndianSupport(const MagickInfo *),
   GetMagickRawSupport(const MagickInfo *),
   GetMagickSeekableStream(const MagickInfo *),
-  InstantiateMagickFacility(void),
+  InstantiateMagickComponent(void),
   IsMagickInstantiated(void),
   UnregisterMagickInfo(const char *);
 
@@ -128,7 +128,7 @@
   GetMagickThreadSupport(const MagickInfo *);
 
 extern MagickExport void
-  DestroyMagickFacility(void),
+  DestroyMagickComponent(void),
   MagickCoreGenesis(const char *,const MagickBooleanType),
   MagickCoreTerminus(void);
 
diff --git a/magick/methods.h b/magick/methods.h
index d26e290..40cd3c5 100644
--- a/magick/methods.h
+++ b/magick/methods.h
@@ -107,7 +107,7 @@
 #define Ascii85Encode  PrependMagickMethod(Ascii85Encode)
 #define Ascii85Flush  PrependMagickMethod(Ascii85Flush)
 #define Ascii85Initialize  PrependMagickMethod(Ascii85Initialize)
-#define AsynchronousDestroyResourceFacility  PrependMagickMethod(AsynchronousDestroyResourceFacility)
+#define AsynchronousDestroyResourceComponent  PrependMagickMethod(AsynchronousDestroyResourceComponent)
 #define AttachBlob  PrependMagickMethod(AttachBlob)
 #define AverageImages  PrependMagickMethod(AverageImages)
 #define Base64Decode  PrependMagickMethod(Base64Decode)
@@ -223,12 +223,12 @@
 #define DespeckleImage  PrependMagickMethod(DespeckleImage)
 #define DestroyBlob  PrependMagickMethod(DestroyBlob)
 #define DestroyCacheView  PrependMagickMethod(DestroyCacheView)
-#define DestroyCoderFacility  PrependMagickMethod(DestroyCoderFacility)
-#define DestroyColorFacility  PrependMagickMethod(DestroyColorFacility)
-#define DestroyConfigureFacility  PrependMagickMethod(DestroyConfigureFacility)
+#define DestroyCoderComponent  PrependMagickMethod(DestroyCoderComponent)
+#define DestroyColorComponent  PrependMagickMethod(DestroyColorComponent)
+#define DestroyConfigureComponent  PrependMagickMethod(DestroyConfigureComponent)
 #define DestroyConfigureOptions  PrependMagickMethod(DestroyConfigureOptions)
-#define DestroyConstituteFacility  PrependMagickMethod(DestroyConstituteFacility)
-#define DestroyDelegateFacility  PrependMagickMethod(DestroyDelegateFacility)
+#define DestroyConstituteComponent  PrependMagickMethod(DestroyConstituteComponent)
+#define DestroyDelegateComponent  PrependMagickMethod(DestroyDelegateComponent)
 #define DestroyDrawInfo  PrependMagickMethod(DestroyDrawInfo)
 #define DestroyExceptionInfo  PrependMagickMethod(DestroyExceptionInfo)
 #define DestroyFxInfo  PrependMagickMethod(DestroyFxInfo)
@@ -242,28 +242,28 @@
 #define DestroyImage  PrependMagickMethod(DestroyImage)
 #define DestroyImageProfiles  PrependMagickMethod(DestroyImageProfiles)
 #define DestroyImageProperties  PrependMagickMethod(DestroyImageProperties)
-#define DestroyRegistryFacility  PrependMagickMethod(DestroyRegistryFacility)
+#define DestroyRegistryComponent  PrependMagickMethod(DestroyRegistryComponent)
 #define DestroyImages  PrependMagickMethod(DestroyImages)
 #define DestroyLinkedList  PrependMagickMethod(DestroyLinkedList)
-#define DestroyLocaleFacility  PrependMagickMethod(DestroyLocaleFacility)
+#define DestroyLocaleComponent  PrependMagickMethod(DestroyLocaleComponent)
 #define DestroyLocaleOptions  PrependMagickMethod(DestroyLocaleOptions)
-#define DestroyLogFacility  PrependMagickMethod(DestroyLogFacility)
-#define DestroyMagickFacility  PrependMagickMethod(DestroyMagickFacility)
+#define DestroyLogComponent  PrependMagickMethod(DestroyLogComponent)
+#define DestroyMagickComponent  PrependMagickMethod(DestroyMagickComponent)
 #define DestroyMagickMemory  PrependMagickMethod(DestroyMagickMemory)
 #define DestroyMagick  PrependMagickMethod(DestroyMagick)
 #define DestroyMagickRegistry  PrependMagickMethod(DestroyMagickRegistry)
-#define DestroyResourceFacility  PrependMagickMethod(DestroyResourceFacility)
-#define DestroyMagicFacility  PrependMagickMethod(DestroyMagicFacility)
-#define DestroyMimeFacility  PrependMagickMethod(DestroyMimeFacility)
+#define DestroyResourceComponent  PrependMagickMethod(DestroyResourceComponent)
+#define DestroyMagicComponent  PrependMagickMethod(DestroyMagicComponent)
+#define DestroyMimeComponent  PrependMagickMethod(DestroyMimeComponent)
 #define DestroyMontageInfo  PrependMagickMethod(DestroyMontageInfo)
 #define DestroyPixelCache  PrependMagickMethod(DestroyPixelCache)
 #define DestroyPixelCacheNexus  PrependMagickMethod(DestroyPixelCacheNexus)
 #define DestroyCacheFaclity  PrependMagickMethod(DestroyCacheFaclity)
-#define DestroyPolicyFacility  PrependMagickMethod(DestroyPolicyFacility)
+#define DestroyPolicyComponent  PrependMagickMethod(DestroyPolicyComponent)
 #define DestroyQuantizeInfo  PrependMagickMethod(DestroyQuantizeInfo)
 #define DestroyQuantumInfo  PrependMagickMethod(DestroyQuantumInfo)
 #define DestroyRandomInfo  PrependMagickMethod(DestroyRandomInfo)
-#define DestroyRandomFacility  PrependMagickMethod(DestroyRandomFacility)
+#define DestroyRandomComponent  PrependMagickMethod(DestroyRandomComponent)
 #define DestroyResampleFilter  PrependMagickMethod(DestroyResampleFilter)
 #define DestroyResizeFilter  PrependMagickMethod(DestroyResizeFilter)
 #define DestroySemaphoreInfo  PrependMagickMethod(DestroySemaphoreInfo)
@@ -277,7 +277,7 @@
 #define DestroyThresholdMap  PrependMagickMethod(DestroyThresholdMap)
 #define DestroyTimerInfo  PrependMagickMethod(DestroyTimerInfo)
 #define DestroyTokenInfo  PrependMagickMethod(DestroyTokenInfo)
-#define DestroyTypeFacility  PrependMagickMethod(DestroyTypeFacility)
+#define DestroyTypeComponent  PrependMagickMethod(DestroyTypeComponent)
 #define DestroyXMLTree  PrependMagickMethod(DestroyXMLTree)
 #define DestroyXResources  PrependMagickMethod(DestroyXResources)
 #define DestroyXWidget  PrependMagickMethod(DestroyXWidget)
@@ -622,7 +622,7 @@
 #define InheritException  PrependMagickMethod(InheritException)
 #define InitializeMagick  PrependMagickMethod(InitializeMagick)
 #define InitializeMagickResources  PrependMagickMethod(InitializeMagickResources)
-#define InstantiateSemaphoreFacility  PrependMagickMethod(InstantiateSemaphoreFacility)
+#define InstantiateSemaphoreComponent  PrependMagickMethod(InstantiateSemaphoreComponent)
 #define InitializeSignature  PrependMagickMethod(InitializeSignature)
 #define InjectImageBlob  PrependMagickMethod(InjectImageBlob)
 #define InsertImageInList  PrependMagickMethod(InsertImageInList)
diff --git a/magick/mime.c b/magick/mime.c
index 90e1c50..2eb8143 100644
--- a/magick/mime.c
+++ b/magick/mime.c
@@ -131,17 +131,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y M i m e F a c i l i t y                                     %
++   D e s t r o y M i m e C o m p o n e n t                                   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyMimeFacility() destroys the mime facility.
+%  DestroyMimeComponent() destroys the mime component.
 %
-%  The format of the DestroyMimeFacility method is:
+%  The format of the DestroyMimeComponent method is:
 %
-%      DestroyMimeFacility(void)
+%      DestroyMimeComponent(void)
 %
 */
 
@@ -165,7 +165,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyMimeFacility(void)
+MagickExport void DestroyMimeComponent(void)
 {
   AcquireSemaphoreInfo(&mime_semaphore);
   if (mime_list != (LinkedListInfo *) NULL)
@@ -670,20 +670,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e M i m e F a c i l i t y                             %
++   I n s t a n t i a t e M i m e C o m p o n e n t                           %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateMimeFacility() instantiates the mime facility.
+%  InstantiateMimeComponent() instantiates the mime component.
 %
-%  The format of the InstantiateMimeFacility method is:
+%  The format of the InstantiateMimeComponent method is:
 %
-%      MagickBooleanType InstantiateMimeFacility(void)
+%      MagickBooleanType InstantiateMimeComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateMimeFacility(void)
+MagickExport MagickBooleanType InstantiateMimeComponent(void)
 {
   AcquireSemaphoreInfo(&mime_semaphore);
   RelinquishSemaphoreInfo(mime_semaphore);
diff --git a/magick/mime.h b/magick/mime.h
index 1c6ae62..5ba7a7c 100644
--- a/magick/mime.h
+++ b/magick/mime.h
@@ -34,7 +34,7 @@
   *GetMimeType(const MimeInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateMimeFacility(void),
+  InstantiateMimeComponent(void),
   ListMimeInfo(FILE *,ExceptionInfo *),
   LoadMimeLists(const char *,ExceptionInfo *);
 
@@ -43,7 +43,7 @@
   **GetMimeInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyMimeFacility(void);
+  DestroyMimeComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/module.c b/magick/module.c
index 259c777..7c11c75 100644
--- a/magick/module.c
+++ b/magick/module.c
@@ -884,20 +884,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e M o d u l e F a c i l i t y                         %
++   I n s t a n t i a t e M o d u l e C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateModuleFacility() instantiates the module facility.
+%  InstantiateModuleComponent() instantiates the module component.
 %
-%  The format of the InstantiateModuleFacility method is:
+%  The format of the InstantiateModuleComponent method is:
 %
-%      MagickBooleanType InstantiateModuleFacility(void)
+%      MagickBooleanType InstantiateModuleComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateModuleFacility(void)
+MagickExport MagickBooleanType InstantiateModuleComponent(void)
 {
   AcquireSemaphoreInfo(&module_semaphore);
   RelinquishSemaphoreInfo(module_semaphore);
diff --git a/magick/module.h b/magick/module.h
index c781e2f..4d1f0c7 100644
--- a/magick/module.h
+++ b/magick/module.h
@@ -74,7 +74,7 @@
 
 extern MagickExport MagickBooleanType
   InitializeModuleList(ExceptionInfo *),
-  InstantiateModuleFacility(void),
+  InstantiateModuleComponent(void),
   InvokeDynamicImageFilter(const char *,Image **,const int,const char **,
     ExceptionInfo *),
   ListModuleInfo(FILE *,ExceptionInfo *),
diff --git a/magick/nt-base.c b/magick/nt-base.c
index a6b8487..2931780 100644
--- a/magick/nt-base.c
+++ b/magick/nt-base.c
@@ -350,7 +350,7 @@
 static BOOL ControlHandler(DWORD type)
 {
   (void) type;
-  AsynchronousDestroyResourceFacility();
+  AsynchronousDestroyResourceComponent();
   return(FALSE);
 }
 
diff --git a/magick/policy.c b/magick/policy.c
index a6701e1..d5cc002 100644
--- a/magick/policy.c
+++ b/magick/policy.c
@@ -124,17 +124,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y P o l i c y F a c i l i t y                                 %
++   D e s t r o y P o l i c y C o m p o n e n t                               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyPolicyFacility() destroys the policy facility.
+%  DestroyPolicyComponent() destroys the policy component.
 %
-%  The format of the DestroyPolicyFacility method is:
+%  The format of the DestroyPolicyComponent method is:
 %
-%      DestroyPolicyFacility(void)
+%      DestroyPolicyComponent(void)
 %
 */
 
@@ -156,7 +156,7 @@
   return((void *) NULL);
 }
 
-MagickExport void DestroyPolicyFacility(void)
+MagickExport void DestroyPolicyComponent(void)
 {
   AcquireSemaphoreInfo(&policy_semaphore);
   if (policy_list != (LinkedListInfo *) NULL)
@@ -479,20 +479,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e P o l i c y F a c i l i t y                         %
++   I n s t a n t i a t e P o l i c y C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiatePolicyFacility() instantiates the policy facility.
+%  InstantiatePolicyComponent() instantiates the policy component.
 %
-%  The format of the InstantiatePolicyFacility method is:
+%  The format of the InstantiatePolicyComponent method is:
 %
-%      MagickBooleanType InstantiatePolicyFacility(void)
+%      MagickBooleanType InstantiatePolicyComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiatePolicyFacility(void)
+MagickExport MagickBooleanType InstantiatePolicyComponent(void)
 {
   AcquireSemaphoreInfo(&policy_semaphore);
   RelinquishSemaphoreInfo(policy_semaphore);
diff --git a/magick/policy.h b/magick/policy.h
index 17a3ab1..829e12a 100644
--- a/magick/policy.h
+++ b/magick/policy.h
@@ -55,12 +55,12 @@
   **GetPolicyInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiatePolicyFacility(void),
+  InstantiatePolicyComponent(void),
   IsRightsAuthorized(const PolicyDomain,const PolicyRights,const char *),
   ListPolicyInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyPolicyFacility(void);
+  DestroyPolicyComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
diff --git a/magick/random.c b/magick/random.c
index aa3876d..10d4b01 100644
--- a/magick/random.c
+++ b/magick/random.c
@@ -252,20 +252,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y R a n d o m F a c i l i t y                                 %
++   D e s t r o y R a n d o m C o m p o n e n t                               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyRandomFacility() destroys the random facility.
+%  DestroyRandomComponent() destroys the random component.
 %
-%  The format of the DestroyRandomFacility method is:
+%  The format of the DestroyRandomComponent method is:
 %
-%      DestroyRandomFacility(void)
+%      DestroyRandomComponent(void)
 %
 */
-MagickExport void DestroyRandomFacility(void)
+MagickExport void DestroyRandomComponent(void)
 {
   AcquireSemaphoreInfo(&random_semaphore);
   (void) UnlockSemaphoreInfo(random_semaphore);
@@ -714,20 +714,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e R a n d o m F a c i l i t y                         %
++   I n s t a n t i a t e R a n d o m C o m p o n e n t                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateRandomFacility() instantiates the random facility.
+%  InstantiateRandomComponent() instantiates the random component.
 %
-%  The format of the InstantiateRandomFacility method is:
+%  The format of the InstantiateRandomComponent method is:
 %
-%      MagickBooleanType InstantiateRandomFacility(void)
+%      MagickBooleanType InstantiateRandomComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateRandomFacility(void)
+MagickExport MagickBooleanType InstantiateRandomComponent(void)
 {
   AcquireSemaphoreInfo(&random_semaphore);
   RelinquishSemaphoreInfo(random_semaphore);
diff --git a/magick/random_.h b/magick/random_.h
index 35db5ad..c589043 100644
--- a/magick/random_.h
+++ b/magick/random_.h
@@ -38,7 +38,7 @@
   GetPseudoRandomValue(RandomInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateRandomFacility(void);
+  InstantiateRandomComponent(void);
 
 extern MagickExport RandomInfo
   *AcquireRandomInfo(void),
@@ -48,7 +48,7 @@
   *GetRandomKey(RandomInfo *,const size_t);
 
 extern MagickExport void
-  DestroyRandomFacility(void),
+  DestroyRandomComponent(void),
   SeedPseudoRandomGenerator(const unsigned long),
   SetRandomKey(RandomInfo *,const size_t,unsigned char *),
   SetRandomTrueRandom(const MagickBooleanType);
diff --git a/magick/registry.c b/magick/registry.c
index 71b2e87..b40d6c8 100644
--- a/magick/registry.c
+++ b/magick/registry.c
@@ -163,20 +163,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   D e s t r o y R e g i s t r y F a c i l i t y                             %
+%   D e s t r o y R e g i s t r y C o m p o n e n t                           %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyRegistryFacility() destroys the registry facility.
+%  DestroyRegistryComponent() destroys the registry component.
 %
 %  The format of the DestroyDefines method is:
 %
-%      void DestroyRegistryFacility(void)
+%      void DestroyRegistryComponent(void)
 %
 */
-MagickExport void DestroyRegistryFacility(void)
+MagickExport void DestroyRegistryComponent(void)
 {
   AcquireSemaphoreInfo(&registry_semaphore);
   if (IsEventLogging() != MagickFalse)
@@ -314,20 +314,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e R e g i s t r y F a c i l i t y                     %
++   I n s t a n t i a t e R e g i s t r y C o m p o n e n t                   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateRegistryFacility() instantiates the registry facility.
+%  InstantiateRegistryComponent() instantiates the registry component.
 %
-%  The format of the InstantiateRegistryFacility method is:
+%  The format of the InstantiateRegistryComponent method is:
 %
-%      MagickBooleanType InstantiateRegistryFacility(void)
+%      MagickBooleanType InstantiateRegistryComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateRegistryFacility(void)
+MagickExport MagickBooleanType InstantiateRegistryComponent(void)
 {
   AcquireSemaphoreInfo(&registry_semaphore);
   RelinquishSemaphoreInfo(registry_semaphore);
diff --git a/magick/registry.h b/magick/registry.h
index d525be6..37bbc9c 100644
--- a/magick/registry.h
+++ b/magick/registry.h
@@ -36,12 +36,12 @@
 extern MagickExport MagickBooleanType
   DefineImageRegistry(const RegistryType,const char *,ExceptionInfo *),
   DeleteImageRegistry(const char *),
-  InstantiateRegistryFacility(void),
+  InstantiateRegistryComponent(void),
   SetImageRegistry(const RegistryType,const char *,const void *,
     ExceptionInfo *);
 
 extern MagickExport void
-  DestroyRegistryFacility(void),
+  DestroyRegistryComponent(void),
   *GetImageRegistry(const RegistryType,const char *,ExceptionInfo *),
   *RemoveImageRegistry(const char *),
   ResetImageRegistryIterator(void);
diff --git a/magick/resource.c b/magick/resource.c
index e701f38..8d92678 100644
--- a/magick/resource.c
+++ b/magick/resource.c
@@ -265,22 +265,22 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   A s y n c h r o n o u s D e s t r o y R e s o u r c e F a c i l i t y     %
++   A s y n c h r o n o u s D e s t r o y R e s o u r c e C o m p o n e n t   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  AsynchronousDestroyResourceFacility() destroys the resource environment.
-%  It differs from DestroyResourceFacility() in that it can be called from a
+%  AsynchronousDestroyResourceComponent() destroys the resource environment.
+%  It differs from DestroyResourceComponent() in that it can be called from a
 %  asynchronous signal handler.
 %
-%  The format of the DestroyResourceFacility() method is:
+%  The format of the DestroyResourceComponent() method is:
 %
-%      DestroyResourceFacility(void)
+%      DestroyResourceComponent(void)
 %
 */
-MagickExport void AsynchronousDestroyResourceFacility(void)
+MagickExport void AsynchronousDestroyResourceComponent(void)
 {
   const char
     *path;
@@ -482,20 +482,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y R e s o u r c e F a c i l i t y                             %
++   D e s t r o y R e s o u r c e C o m p o n e n t                           %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyResourceFacility() destroys the resource facility.
+%  DestroyResourceComponent() destroys the resource component.
 %
-%  The format of the DestroyResourceFacility() method is:
+%  The format of the DestroyResourceComponent() method is:
 %
-%      DestroyResourceFacility(void)
+%      DestroyResourceComponent(void)
 %
 */
-MagickExport void DestroyResourceFacility(void)
+MagickExport void DestroyResourceComponent(void)
 {
   AcquireSemaphoreInfo(&resource_semaphore);
   if (temporary_resources != (SplayTreeInfo *) NULL)
@@ -657,17 +657,17 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e R e s o u r c e F a c i l i t y                     %
++   I n s t a n t i a t e R e s o u r c e C o m p o n e n t                   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateResourcesFacility() instantiates the resource facility.
+%  InstantiateResourcesComponent() instantiates the resource component.
 %
-%  The format of the InstantiateResourcesFacility method is:
+%  The format of the InstantiateResourcesComponent method is:
 %
-%      MagickBooleanType InstantiateResourcesFacility(void)
+%      MagickBooleanType InstantiateResourcesComponent(void)
 %
 */
 
@@ -691,7 +691,7 @@
   return((MagickSizeType) value);
 }
 
-MagickExport MagickBooleanType InstantiateResourcesFacility(void)
+MagickExport MagickBooleanType InstantiateResourcesComponent(void)
 {
   char
     *limit;
diff --git a/magick/resource_.h b/magick/resource_.h
index a65204f..ae8841b 100644
--- a/magick/resource_.h
+++ b/magick/resource_.h
@@ -41,7 +41,7 @@
 
 extern MagickExport MagickBooleanType
   AcquireMagickResource(const ResourceType,const MagickSizeType),
-  InstantiateResourcesFacility(void),
+  InstantiateResourcesComponent(void),
   ListMagickResourceInfo(FILE *,ExceptionInfo *),
   RelinquishUniqueFileResource(const char *),
   SetMagickResourceLimit(const ResourceType,const MagickSizeType);
@@ -51,8 +51,8 @@
   GetMagickResourceLimit(const ResourceType);
 
 extern MagickExport void
-  AsynchronousDestroyResourceFacility(void),
-  DestroyResourceFacility(void),
+  AsynchronousDestroyResourceComponent(void),
+  DestroyResourceComponent(void),
   RelinquishMagickResource(const ResourceType,const MagickSizeType);
 
 #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/magick/semaphore.c b/magick/semaphore.c
index a98f78c..abba4ac 100644
--- a/magick/semaphore.c
+++ b/magick/semaphore.c
@@ -172,7 +172,7 @@
         semaphore_info=(SemaphoreInfo *) RelinquishAlignedMemory(
           semaphore_info);
         ThrowFatalException(ResourceLimitFatalError,
-          "UnableToInstantiateSemaphoreFacility");
+          "UnableToInstantiateSemaphoreComponent");
       }
     status=pthread_mutex_init(&semaphore_info->mutex,&mutex_info);
     (void) pthread_mutexattr_destroy(&mutex_info);
@@ -181,7 +181,7 @@
         semaphore_info=(SemaphoreInfo *) RelinquishAlignedMemory(
           semaphore_info);
         ThrowFatalException(ResourceLimitFatalError,
-          "UnableToInstantiateSemaphoreFacility");
+          "UnableToInstantiateSemaphoreComponent");
       }
   }
 #elif defined(MAGICKCORE_HAVE_WINTHREADS)
@@ -198,20 +198,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   D e s t r o y S e m a p h o r e F a c i l i t y                           %
+%   D e s t r o y S e m a p h o r e C o m p o n e n t                         %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroySemaphoreFacility() destroys the semaphore facility.
+%  DestroySemaphoreComponent() destroys the semaphore component.
 %
-%  The format of the DestroySemaphoreFacility method is:
+%  The format of the DestroySemaphoreComponent method is:
 %
-%      DestroySemaphoreFacility(void)
+%      DestroySemaphoreComponent(void)
 %
 */
-MagickExport void DestroySemaphoreFacility(void)
+MagickExport void DestroySemaphoreComponent(void)
 {
 #if defined(MAGICKCORE_HAVE_PTHREAD)
   if (pthread_mutex_destroy(&semaphore_mutex) != 0)
@@ -273,14 +273,14 @@
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateSemaphoreFacility() instantiates the semaphore environment.
+%  InstantiateSemaphoreComponent() instantiates the semaphore environment.
 %
-%  The format of the InstantiateSemaphoreFacility method is:
+%  The format of the InstantiateSemaphoreComponent method is:
 %
-%      MagickBooleanType InstantiateSemaphoreFacility(void)
+%      MagickBooleanType InstantiateSemaphoreComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateSemaphoreFacility(void)
+MagickExport MagickBooleanType InstantiateSemaphoreComponent(void)
 {
   LockMagickMutex();
   UnlockMagickMutex();
diff --git a/magick/semaphore.h b/magick/semaphore.h
index 4d09deb..810a6af 100644
--- a/magick/semaphore.h
+++ b/magick/semaphore.h
@@ -26,7 +26,7 @@
   SemaphoreInfo;
 
 extern MagickExport MagickBooleanType
-  InstantiateSemaphoreFacility(void),
+  InstantiateSemaphoreComponent(void),
   LockSemaphoreInfo(SemaphoreInfo *),
   UnlockSemaphoreInfo(SemaphoreInfo *);
 
@@ -35,7 +35,7 @@
 
 extern MagickExport void
   AcquireSemaphoreInfo(SemaphoreInfo **),
-  DestroySemaphoreFacility(void),
+  DestroySemaphoreComponent(void),
   DestroySemaphoreInfo(SemaphoreInfo **),
   RelinquishSemaphoreInfo(SemaphoreInfo *);
 
diff --git a/magick/type.c b/magick/type.c
index 1f8e48d..d599358 100644
--- a/magick/type.c
+++ b/magick/type.c
@@ -133,20 +133,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   D e s t r o y T y p e F a c i l i t y                                     %
++   D e s t r o y T y p e C o m p o n e n t                                   %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  DestroyTypeFacility() destroy type facility.
+%  DestroyTypeComponent() destroy type component.
 %
-%  The format of the DestroyTypeFacility method is:
+%  The format of the DestroyTypeComponent method is:
 %
-%      void DestroyTypeFacility(void)
+%      void DestroyTypeComponent(void)
 %
 */
-MagickExport void DestroyTypeFacility(void)
+MagickExport void DestroyTypeComponent(void)
 {
   AcquireSemaphoreInfo(&type_semaphore);
   if (type_list != (SplayTreeInfo *) NULL)
@@ -822,20 +822,20 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   I n s t a n t i a t e T y p e F a c i l i t y                             %
++   I n s t a n t i a t e T y p e C o m p o n e n t                           %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  InstantiateTypeFacility() instantiates the type facility.
+%  InstantiateTypeComponent() instantiates the type component.
 %
-%  The format of the InstantiateTypeFacility method is:
+%  The format of the InstantiateTypeComponent method is:
 %
-%      MagickBooleanType InstantiateTypeFacility(void)
+%      MagickBooleanType InstantiateTypeComponent(void)
 %
 */
-MagickExport MagickBooleanType InstantiateTypeFacility(void)
+MagickExport MagickBooleanType InstantiateTypeComponent(void)
 {
   AcquireSemaphoreInfo(&type_semaphore);
   RelinquishSemaphoreInfo(type_semaphore);
diff --git a/magick/type.h b/magick/type.h
index 35a957d..597233c 100644
--- a/magick/type.h
+++ b/magick/type.h
@@ -88,7 +88,7 @@
   **GetTypeList(const char *,unsigned long *,ExceptionInfo *);
 
 extern MagickExport MagickBooleanType
-  InstantiateTypeFacility(void),
+  InstantiateTypeComponent(void),
   ListTypeInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport const TypeInfo
@@ -98,7 +98,7 @@
   **GetTypeInfoList(const char *,unsigned long *,ExceptionInfo *);
 
 MagickExport void
-  DestroyTypeFacility(void);
+  DestroyTypeComponent(void);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }
