* include/freetype/internal/bdftypes.h: removed obsolete header

        * include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
        src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
        include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
        'include/freetype/internal' to 'src/cff' since no other modules needs
        to known about these types

        * include/freetype/internal/t42types.h,
        include/freetype/internal/internal.h, src/type42/t42objs.h,
        src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
        'include/freetype/internal' to 'src/type42' since no other modules needs
        to known about these types

        * src/gzip/infblock.c: removing compiler warning

        * include/freetype/internal/services/svpsinfo.h,
        include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
        src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
        src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
        in "svpsinfo.h", removing some sad hacks.
diff --git a/ChangeLog b/ChangeLog
index 1d82f64..f142676 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2003-10-29  David Turner  <david@freetype.org>
+
+        * include/freetype/internal/bdftypes.h: removed obsolete header
+
+        * include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
+        src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
+        include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
+        'include/freetype/internal' to 'src/cff' since no other modules needs
+        to known about these types
+
+        * include/freetype/internal/t42types.h,
+        include/freetype/internal/internal.h, src/type42/t42objs.h,
+        src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
+        'include/freetype/internal' to 'src/type42' since no other modules needs
+        to known about these types
+
+        * src/gzip/infblock.c: removing compiler warning
+
+        * include/freetype/internal/services/svpsinfo.h,
+        include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
+        src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
+        src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
+        in "svpsinfo.h", removing some sad hacks.
+
+
 2003-10-22  Werner Lemberg  <wl@gnu.org>
 
 	* src/type1/t1load.c (parse_encoding): Handle `/Encoding [ ... ]'.
diff --git a/include/freetype/internal/bdftypes.h b/include/freetype/internal/bdftypes.h
deleted file mode 100644
index 3a1ec64..0000000
--- a/include/freetype/internal/bdftypes.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*  bdftypes.h
-
-  FreeType font driver for bdf fonts
-
-  Copyright (C) 2001, 2002 by
-  Francesco Zappa Nardelli
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef __BDFTYPES_H__
-#define __BDFTYPES_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_BDF_H
-
-
-FT_BEGIN_HEADER
-
-
-  typedef struct  BDF_Public_FaceRec_
-  {
-    FT_FaceRec  root;
-
-    char*       charset_encoding;
-    char*       charset_registry;
-
-  } BDF_Public_FaceRec, *BDF_Public_Face;
-
-
-  typedef FT_Error  (*BDF_GetPropertyFunc)( FT_Face           face,
-                                            const char*       prop_name,
-                                            BDF_PropertyRec  *aproperty );
-
-FT_END_HEADER
-
-
-#endif  /* __BDFTYPES_H__ */
-
-
-/* END */
diff --git a/include/freetype/internal/ftserv.h b/include/freetype/internal/ftserv.h
index 561d6f5..e0596ad 100644
--- a/include/freetype/internal/ftserv.h
+++ b/include/freetype/internal/ftserv.h
@@ -241,6 +241,8 @@
 #define FT_SERVICE_MULTIPLE_MASTERS_H  <freetype/internal/services/svmm.h>
 #define FT_SERVICE_POSTSCRIPT_NAME_H   <freetype/internal/services/svpostnm.h>
 #define FT_SERVICE_POSTSCRIPT_NAMES_H  <freetype/internal/services/svpsname.h>
+#define FT_SERVICE_POSTSCRIPT_CMAPS_H  <freetype/internal/services/svpscmap.h>
+#define FT_SERVICE_POSTSCRIPT_INFO_H   <freetype/internal/services/svpsinfo.h>
 #define FT_SERVICE_GLYPH_DICT_H        <freetype/internal/services/svgldict.h>
 #define FT_SERVICE_BDF_H               <freetype/internal/services/svbdf.h>
 #define FT_SERVICE_XFREE86_NAME_H      <freetype/internal/services/svxf86nm.h>
diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h
index 3b030cf..0348789 100644
--- a/include/freetype/internal/internal.h
+++ b/include/freetype/internal/internal.h
@@ -37,9 +37,6 @@
 
 #define FT_INTERNAL_TRUETYPE_TYPES_H      <freetype/internal/tttypes.h>
 #define FT_INTERNAL_TYPE1_TYPES_H         <freetype/internal/t1types.h>
-#define FT_INTERNAL_TYPE42_TYPES_H        <freetype/internal/t42types.h>
-#define FT_INTERNAL_CFF_TYPES_H           <freetype/internal/cfftypes.h>
-#define FT_INTERNAL_BDF_TYPES_H           <freetype/internal/bdftypes.h>
 
 #define FT_INTERNAL_POSTSCRIPT_AUX_H      <freetype/internal/psaux.h>
 #define FT_INTERNAL_POSTSCRIPT_HINTS_H    <freetype/internal/pshints.h>
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h
index bc36da7..e013d52 100644
--- a/include/freetype/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -24,7 +24,7 @@
 #include <ft2build.h>
 #include FT_INTERNAL_OBJECTS_H
 #include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 
 FT_BEGIN_HEADER
@@ -651,7 +651,7 @@
     T1_Decoder_ZoneRec   zones[T1_MAX_SUBRS_CALLS + 1];
     T1_Decoder_Zone      zone;
 
-    FT_Service_PsNames   psnames;      /* for seac */
+    FT_Service_PsCMaps   psnames;      /* for seac */
     FT_UInt              num_glyphs;
     FT_Byte**            glyph_names;
 
diff --git a/include/freetype/internal/services/svbdf.h b/include/freetype/internal/services/svbdf.h
index 276354f..0f7fc61 100644
--- a/include/freetype/internal/services/svbdf.h
+++ b/include/freetype/internal/services/svbdf.h
@@ -19,6 +19,7 @@
 #ifndef __SVBDF_H__
 #define __SVBDF_H__
 
+#include FT_BDF_H
 #include FT_INTERNAL_SERVICE_H
 
 
@@ -27,7 +28,6 @@
 
 #define FT_SERVICE_ID_BDF  "bdf"
 
-
   typedef FT_Error
   (*FT_BDF_GetCharsetIdFunc)( FT_Face       face,
                               const char*  *acharset_encoding,
@@ -47,7 +47,7 @@
 
   /* */
 
- 
+
 FT_END_HEADER
 
 
diff --git a/include/freetype/internal/services/svpsname.h b/include/freetype/internal/services/svpscmap.h
similarity index 91%
rename from include/freetype/internal/services/svpsname.h
rename to include/freetype/internal/services/svpscmap.h
index 279afda..374503b 100644
--- a/include/freetype/internal/services/svpsname.h
+++ b/include/freetype/internal/services/svpscmap.h
@@ -1,8 +1,8 @@
 /***************************************************************************/
 /*                                                                         */
-/*  svpsname.h                                                             */
+/*  svpscmap.h                                                             */
 /*                                                                         */
-/*    The FreeType glyph PS name services (specification).                 */
+/*    The FreeType PostScript charmap service (specification)              */
 /*                                                                         */
 /*  Copyright 2003 by                                                      */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
@@ -16,14 +16,14 @@
 /***************************************************************************/
 
 
-#ifndef __SVPSNAME_H__
-#define __SVPSNAME_H__
+#ifndef __SVPSCMAP_H__
+#define __SVPSCMAP_H__
 
 
 FT_BEGIN_HEADER
 
 
-#define FT_SERVICE_ID_POSTSCRIPT_NAMES  "postscript-names"
+#define FT_SERVICE_ID_POSTSCRIPT_CMAPS  "postscript-cmaps"
 
 
   /*
@@ -87,7 +87,7 @@
                                FT_ULong      unicode );
 
 
-  FT_DEFINE_SERVICE( PsNames )
+  FT_DEFINE_SERVICE( PsCMaps )
   {
     PS_Unicode_ValueFunc       unicode_value;
 
diff --git a/include/freetype/internal/services/svpsinfo.h b/include/freetype/internal/services/svpsinfo.h
new file mode 100644
index 0000000..5bf7c49
--- /dev/null
+++ b/include/freetype/internal/services/svpsinfo.h
@@ -0,0 +1,30 @@
+#ifndef __SVPSINFO_H__

+#define __SVPSINFO_H__

+

+#include FT_INTERNAL_SERVICE_H

+#include FT_INTERNAL_TYPE1_TYPES_H

+

+FT_BEGIN_HEADER

+

+

+#define FT_SERVICE_ID_POSTSCRIPT_INFO  "postscript-info"

+

+  typedef FT_Error  (*PS_GetFontInfoFunc)( FT_Face          face,

+                                           PS_FontInfoRec*  afont_info );

+

+  typedef FT_Int    (*PS_HasGlyphNamesFunc)( FT_Face   face );

+

+  FT_DEFINE_SERVICE( PsInfo )

+  {

+    PS_GetFontInfoFunc    ps_get_font_info;

+    PS_HasGlyphNamesFunc  ps_has_glyph_names;

+  };

+

+  /* */

+

+

+FT_END_HEADER

+

+

+

+#endif /* __SVPSINFO_H__ */

diff --git a/include/freetype/internal/t1types.h b/include/freetype/internal/t1types.h
index 3d290d5..08bdfb1 100644
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -25,7 +25,7 @@
 #include FT_TYPE1_TABLES_H
 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
 #include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 
 FT_BEGIN_HEADER
diff --git a/include/freetype/internal/tttypes.h b/include/freetype/internal/tttypes.h
index 4b71b95..2b419f1 100644
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -1500,7 +1500,7 @@
     /* the basic TrueType tables in the face object                */
     void*                 sfnt;
 
-    /* a typeless pointer to the FT_Service_PsNamesRec table used to */
+    /* a typeless pointer to the FT_Service_PsCMapsRec table used to */
     /* handle glyph names <-> unicode & Mac values                   */
     void*                 psnames;
 
diff --git a/src/base/ftbdf.c b/src/base/ftbdf.c
index 59e5d20..d2f133d 100644
--- a/src/base/ftbdf.c
+++ b/src/base/ftbdf.c
@@ -17,7 +17,6 @@
 
 
 #include <ft2build.h>
-#include FT_INTERNAL_BDF_TYPES_H
 #include FT_INTERNAL_OBJECTS_H
 #include FT_SERVICE_BDF_H
 
diff --git a/src/base/fttype1.c b/src/base/fttype1.c
index d8b1886..7b45139 100644
--- a/src/base/fttype1.c
+++ b/src/base/fttype1.c
@@ -17,9 +17,9 @@
 
 
 #include <ft2build.h>
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_TYPE42_TYPES_H
 #include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_SERVICE_H
+#include FT_SERVICE_POSTSCRIPT_INFO_H
 
 
   /* documentation is in t1tables.h */
@@ -28,58 +28,36 @@
   FT_Get_PS_Font_Info( FT_Face          face,
                        PS_FontInfoRec*  afont_info )
   {
-    PS_FontInfo  font_info = NULL;
-    FT_Error     error     = FT_Err_Invalid_Argument;
-    const char*  driver_name;
+    FT_Error  error = FT_Err_Invalid_Argument;
 
-
-    if ( face && face->driver && face->driver->root.clazz )
+    if ( face )
     {
-      driver_name = face->driver->root.clazz->module_name;
-      if ( ft_strcmp( driver_name, "type1" ) == 0 )
-        font_info = &((T1_Face)face)->type1.font_info;
-      else if ( ft_strcmp( driver_name, "t1cid" ) == 0 )
-        font_info = &((CID_Face)face)->cid.font_info;
-      else if ( ft_strcmp( driver_name, "type42" ) == 0 )
-        font_info = &((T42_Face)face)->type1.font_info;
-    }
-    if ( font_info != NULL )
-    {
-      *afont_info = *font_info;
-      error = FT_Err_Ok;
-    }
+      FT_Service_PsInfo   service = NULL;
 
+      FT_FACE_FIND_SERVICE( service, face, POSTSCRIPT_INFO );
+
+      if ( service && service->ps_get_font_info )
+        error = service->ps_get_font_info( face, afont_info );
+    }
     return error;
   }
 
 
-  /* XXX: Bad hack, but I didn't want to change several drivers here. */
-
   /* documentation is in t1tables.h */
 
   FT_EXPORT_DEF( FT_Int )
   FT_Has_PS_Glyph_Names( FT_Face  face )
   {
-    FT_Int       result = 0;
-    const char*  driver_name;
+    FT_Int             result  = 0;
+    FT_Service_PsInfo  service = NULL;
 
-
-    if ( face && face->driver && face->driver->root.clazz )
+    if ( face )
     {
-      /* Currently, only the type1, type42, and cff drivers provide */
-      /* reliable glyph names...                                    */
+      FT_FACE_FIND_SERVICE( service, face, POSTSCRIPT_INFO );
 
-      /* We could probably hack the TrueType driver to recognize    */
-      /* certain cases where the glyph names are most certainly     */
-      /* correct (e.g. using a 20 or 22 format `post' table), but   */
-      /* this will probably happen later...                         */
-
-      driver_name = face->driver->root.clazz->module_name;
-      result      = ( ft_strcmp( driver_name, "type1"  ) == 0 ||
-                      ft_strcmp( driver_name, "type42" ) == 0 ||
-                      ft_strcmp( driver_name, "cff"    ) == 0 );
+      if ( service && service->ps_has_glyph_names )
+        result = service->ps_has_glyph_names( face );
     }
-
     return result;
   }
 
diff --git a/src/cff/cffcmap.c b/src/cff/cffcmap.c
index 46f9594..c50718a 100644
--- a/src/cff/cffcmap.c
+++ b/src/cff/cffcmap.c
@@ -146,7 +146,7 @@
     FT_Memory           memory  = FT_FACE_MEMORY( face );
     CFF_Font            cff     = (CFF_Font)face->extra.data;
     CFF_Charset         charset = &cff->charset;
-    FT_Service_PsNames  psnames = (FT_Service_PsNames)cff->psnames;
+    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)cff->psnames;
 
 
     cmap->num_pairs = 0;
diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
index fe50b26..6099fdf 100644
--- a/src/cff/cffdrivr.c
+++ b/src/cff/cffdrivr.c
@@ -22,7 +22,8 @@
 #include FT_INTERNAL_STREAM_H
 #include FT_INTERNAL_SFNT_H
 #include FT_TRUETYPE_IDS_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include FT_SERVICE_POSTSCRIPT_INFO_H
 
 #include "cffdrivr.h"
 #include "cffgload.h"
@@ -227,11 +228,11 @@
     FT_Memory           memory = FT_FACE_MEMORY( face );
     FT_String*          gname;
     FT_UShort           sid;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     FT_Error            error;
 
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
     if ( !psnames )
     {
       FT_ERROR(( "cff_get_glyph_name:" ));
@@ -274,7 +275,7 @@
   {
     CFF_Font            cff;
     CFF_Charset         charset;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     FT_Memory           memory = FT_FACE_MEMORY( face );
     FT_String*          name;
     FT_UShort           sid;
@@ -285,7 +286,7 @@
     cff     = (CFF_FontRec *)face->extra.data;
     charset = &cff->charset;
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
     for ( i = 0; i < cff->num_glyphs; i++ )
     {
       sid = charset->sids[i];
@@ -314,6 +315,25 @@
     (FT_GlyphDict_NameIndexFunc)cff_get_name_index,
   };
 
+ /*
+  *  POSTSCRIPT INFO SERVICE
+  *
+  */
+
+  static FT_Int
+  cff_ps_has_glyph_names( FT_Face  face )
+  {
+    FT_UNUSED( face );
+    return 1;
+  }
+
+  static const FT_Service_PsInfoRec  cff_service_ps_info =
+  {
+    (PS_GetFontInfoFunc)    NULL,  /* unsupported with CFF fonts */
+    (PS_HasGlyphNamesFunc)  cff_ps_has_glyph_names
+  };
+
+
 
   /*************************************************************************/
   /*************************************************************************/
@@ -329,9 +349,10 @@
 
   static const FT_ServiceDescRec  cff_services[] =
   {
-    { FT_SERVICE_ID_XF86_NAME,  FT_XF86_FORMAT_CFF },
+    { FT_SERVICE_ID_XF86_NAME,       FT_XF86_FORMAT_CFF },
+    { FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info },
 #ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
-    { FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict },
+    { FT_SERVICE_ID_GLYPH_DICT,      &cff_service_glyph_dict },
 #endif
     { NULL, NULL }
   };
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index 205b7ec..e6c27d8 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -20,7 +20,7 @@
 #include FT_INTERNAL_DEBUG_H
 #include FT_INTERNAL_OBJECTS_H
 #include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_TRUETYPE_TAGS_H
 
 #include "cffload.h"
@@ -1314,7 +1314,7 @@
   FT_LOCAL_DEF( FT_String* )
   cff_index_get_sid_string( CFF_Index           idx,
                             FT_UInt             sid,
-                            FT_Service_PsNames  psnames )
+                            FT_Service_PsCMaps  psnames )
   {
     /* if it is not a standard string, return it */
     if ( sid > 390 )
diff --git a/src/cff/cffload.h b/src/cff/cffload.h
index 4c4ae20..fa8ac51 100644
--- a/src/cff/cffload.h
+++ b/src/cff/cffload.h
@@ -21,8 +21,8 @@
 
 
 #include <ft2build.h>
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include "cfftypes.h"
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 
 FT_BEGIN_HEADER
@@ -38,7 +38,7 @@
   FT_LOCAL( FT_String* )
   cff_index_get_sid_string( CFF_Index          idx,
                             FT_UInt            sid,
-                            FT_Service_PsNames psnames );
+                            FT_Service_PsCMaps psnames );
 
 
   FT_LOCAL( FT_Error )
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index e32731f..7da9582 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -24,7 +24,7 @@
 #include FT_TRUETYPE_IDS_H
 #include FT_TRUETYPE_TAGS_H
 #include FT_INTERNAL_SFNT_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
 #include "cffobjs.h"
 #include "cffload.h"
@@ -255,7 +255,7 @@
   {
     FT_Error            error;
     SFNT_Service        sfnt;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     PSHinter_Service    pshinter;
     FT_Bool             pure_cff    = 1;
     FT_Bool             sfnt_format = 0;
@@ -273,7 +273,7 @@
     if ( !sfnt )
       goto Bad_Format;
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
 
     pshinter = (PSHinter_Service)FT_Get_Module_Interface(
                  face->root.driver->root.library, "pshinter" );
@@ -324,7 +324,7 @@
         /* FreeType 2                                                */
       }
 
-      /* now, load the CFF part of the file */
+     /* now, load the CFF part of the file */
       error = face->goto_table( face, TTAG_CFF, stream, 0 );
       if ( error )
         goto Exit;
diff --git a/src/cff/cffobjs.h b/src/cff/cffobjs.h
index afcc222..68ebeca 100644
--- a/src/cff/cffobjs.h
+++ b/src/cff/cffobjs.h
@@ -22,9 +22,9 @@
 
 #include <ft2build.h>
 #include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CFF_TYPES_H
+#include "cfftypes.h"
 #include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 
 FT_BEGIN_HEADER
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
index 2de95a2..b78c286 100644
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -21,7 +21,7 @@
 
 
 #include <ft2build.h>
-#include FT_INTERNAL_CFF_TYPES_H
+#include "cfftypes.h"
 #include FT_INTERNAL_OBJECTS_H
 
 
diff --git a/include/freetype/internal/cfftypes.h b/src/cff/cfftypes.h
similarity index 100%
rename from include/freetype/internal/cfftypes.h
rename to src/cff/cfftypes.h
diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c
index 5081231..ebf45e8 100644
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -23,7 +23,7 @@
 #include "cidgload.h"
 #include "cidload.h"
 
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_INTERNAL_POSTSCRIPT_AUX_H
 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
 
@@ -269,7 +269,7 @@
                  FT_Parameter*  params )
   {
     FT_Error            error;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     PSAux_Service       psaux;
     PSHinter_Service    pshinter;
 
@@ -281,7 +281,7 @@
 
     face->root.num_faces = 1;
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
 
     psaux = (PSAux_Service)face->psaux;
     if ( !psaux )
diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c
index 268bd4e..2f3908a 100644
--- a/src/cid/cidriver.c
+++ b/src/cid/cidriver.c
@@ -26,6 +26,7 @@
 
 #include FT_SERVICE_POSTSCRIPT_NAME_H
 #include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_POSTSCRIPT_INFO_H
 
   /*************************************************************************/
   /*                                                                       */
@@ -62,6 +63,26 @@
 
 
  /*
+  *  POSTSCRIPT INFO SERVICE
+  *
+  */
+
+  static FT_Error
+  cid_ps_get_font_info( FT_Face          face,
+                        PS_FontInfoRec*  afont_info )
+  {
+    *afont_info = ((CID_Face)face)->cid.font_info;
+    return 0;
+  }
+
+  static const FT_Service_PsInfoRec  cid_service_ps_info =
+  {
+    (PS_GetFontInfoFunc)    cid_ps_get_font_info,
+    (PS_HasGlyphNamesFunc)  NULL  /* unsupported with CID fonts */
+  };
+
+
+ /*
   *  SERVICE LIST
   *
   */
@@ -70,6 +91,7 @@
   {
     { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
     { FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_CID },
+    { FT_SERVICE_ID_POSTSCRIPT_INFO,      &cid_service_ps_info },
     { NULL, NULL }
   };
 
diff --git a/src/gzip/infblock.c b/src/gzip/infblock.c
index 8d3e210..d6e2dc2 100644
--- a/src/gzip/infblock.c
+++ b/src/gzip/infblock.c
@@ -156,7 +156,8 @@
             uInt bl, bd;
             inflate_huft *tl, *td;
 
-            inflate_trees_fixed(&bl, &bd, &tl, &td, z);
+            inflate_trees_fixed(&bl, &bd, (const inflate_huft**)&tl,
+                                          (const inflate_huft**)&td, z);
             s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
             if (s->sub.decode.codes == Z_NULL)
             {
diff --git a/src/psaux/t1cmap.c b/src/psaux/t1cmap.c
index 9734c6e..dcd99be 100644
--- a/src/psaux/t1cmap.c
+++ b/src/psaux/t1cmap.c
@@ -36,7 +36,7 @@
                     FT_Int      is_expert )
   {
     T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
-    FT_Service_PsNames  psnames = (FT_Service_PsNames)face->psnames;
+    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;
 
 
     cmap->num_glyphs    = face->type1.num_glyphs;
@@ -282,7 +282,7 @@
     FT_UInt             count;
     T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
     FT_Memory           memory  = FT_FACE_MEMORY( face );
-    FT_Service_PsNames  psnames = (FT_Service_PsNames)face->psnames;
+    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;
 
 
     cmap->num_pairs = 0;
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 6cc0948..a982d6f 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -127,7 +127,7 @@
   {
     FT_UInt             n;
     const FT_String*    glyph_name;
-    FT_Service_PsNames  psnames = decoder->psnames;
+    FT_Service_PsCMaps  psnames = decoder->psnames;
 
 
     /* check range of standard char code */
@@ -1129,10 +1129,10 @@
 
     /* retrieve PSNames interface from list of current modules */
     {
-      FT_Service_PsNames  psnames = 0;
+      FT_Service_PsCMaps  psnames = 0;
 
 
-      FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+      FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
       if ( !psnames )
       {
         FT_ERROR(( "t1_decoder_init: " ));
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c
index f558bee..f6d6ae3 100644
--- a/src/psnames/psmodule.c
+++ b/src/psnames/psmodule.c
@@ -18,7 +18,7 @@
 
 #include <ft2build.h>
 #include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 #include "psmodule.h"
 #include "pstables.h"
@@ -335,7 +335,7 @@
 
 
   static
-  const FT_Service_PsNamesRec  psnames_interface =
+  const FT_Service_PsCMapsRec  pscmaps_interface =
   {
 #ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
 
@@ -361,9 +361,9 @@
   };
 
 
-  static const FT_ServiceDescRec  psnames_services[] =
+  static const FT_ServiceDescRec  pscmaps_services[] =
   {
-    { FT_SERVICE_ID_POSTSCRIPT_NAMES, &psnames_interface },
+    { FT_SERVICE_ID_POSTSCRIPT_CMAPS, &pscmaps_interface },
     { NULL, NULL }
   };
 
@@ -374,7 +374,7 @@
   {
     FT_UNUSED( module );
 
-    return ft_service_list_lookup( psnames_services, service_id );
+    return ft_service_list_lookup( pscmaps_services, service_id );
   }
 
 #endif /* !FT_CONFIG_OPTION_NO_POSTSCRIPT_NAMES */
@@ -397,7 +397,7 @@
     (FT_Module_Destructor) 0,
     (FT_Module_Requester)  0
 #else
-    (void*)&psnames_interface,   /* module specific interface */
+    (void*)&pscmaps_interface,   /* module specific interface */
     (FT_Module_Constructor)0,
     (FT_Module_Destructor) 0,
     (FT_Module_Requester)  psnames_get_service
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index e9f172f..237fc96 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -23,7 +23,7 @@
 #include FT_INTERNAL_SFNT_H
 #include FT_TRUETYPE_IDS_H
 #include FT_TRUETYPE_TAGS_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include "sferrors.h"
 
 
@@ -364,7 +364,7 @@
       face->goto_table = sfnt->goto_table;
     }
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS );
 
     /* check that we have a valid TrueType file */
     error = sfnt->load_sfnt_header( face, stream, face_index, &sfnt_header );
diff --git a/src/sfnt/ttpost.c b/src/sfnt/ttpost.c
index cc5e101..3d526db 100644
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -50,7 +50,7 @@
 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
 
 
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 
 #define MAC_NAME( x )  ( (FT_String*)psnames->macintosh_name( x ) )
 
@@ -441,7 +441,7 @@
     FT_Fixed         format;
 
 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
 #endif
 
 
@@ -452,7 +452,7 @@
       return SFNT_Err_Invalid_Glyph_Index;
 
 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-    psnames = (FT_Service_PsNames)face->psnames;
+    psnames = (FT_Service_PsCMaps)face->psnames;
     if ( !psnames )
       return SFNT_Err_Unimplemented_Feature;
 #endif
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
index b28c2df..5aafca3 100644
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -34,7 +34,8 @@
 #include FT_SERVICE_GLYPH_DICT_H
 #include FT_SERVICE_XFREE86_NAME_H
 #include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include FT_SERVICE_POSTSCRIPT_INFO_H
 
   /*************************************************************************/
   /*                                                                       */
@@ -136,6 +137,32 @@
 
 
  /*
+  *  POSTSCRIPT INFO SERVICE
+  *
+  */
+
+  static FT_Error
+  t1_ps_get_font_info( FT_Face          face,
+                       PS_FontInfoRec*  afont_info )
+  {
+    *afont_info = ((T1_Face)face)->type1.font_info;
+    return 0;
+  }
+
+  static FT_Int
+  t1_ps_has_glyph_names( FT_Face  face )
+  {
+    FT_UNUSED( face );
+    return 1;
+  }
+
+  static const FT_Service_PsInfoRec  t1_service_ps_info =
+  {
+    (PS_GetFontInfoFunc)    t1_ps_get_font_info,
+    (PS_HasGlyphNamesFunc)  t1_ps_has_glyph_names
+  };
+
+ /*
   *  SERVICE LIST
   *
   */
@@ -145,6 +172,7 @@
     { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t1_service_ps_name },
     { FT_SERVICE_ID_GLYPH_DICT,           &t1_service_glyph_dict },
     { FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_TYPE_1 },
+    { FT_SERVICE_ID_POSTSCRIPT_INFO,      &t1_service_ps_info },
 
 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
     { FT_SERVICE_ID_MULTI_MASTERS,        &t1_service_multi_masters },
diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c
index 3959885..6a4f988 100644
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -29,7 +29,7 @@
 #include "t1afm.h"
 #endif
 
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_INTERNAL_POSTSCRIPT_AUX_H
 
 
@@ -276,7 +276,7 @@
                 FT_Parameter*  params )
   {
     FT_Error         error;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     PSAux_Service    psaux;
     T1_Font          type1 = &face->type1;
     PS_FontInfo      info = &type1->font_info;
@@ -289,7 +289,7 @@
 
     face->root.num_faces = 1;
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
     face->psnames = psnames;
 
     face->psaux = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
diff --git a/src/type42/t42drivr.c b/src/type42/t42drivr.c
index 92cccae..deb7f28 100644
--- a/src/type42/t42drivr.c
+++ b/src/type42/t42drivr.c
@@ -43,6 +43,7 @@
 #include FT_SERVICE_XFREE86_NAME_H
 #include FT_SERVICE_GLYPH_DICT_H
 #include FT_SERVICE_POSTSCRIPT_NAME_H
+#include FT_SERVICE_POSTSCRIPT_INFO_H
 
 #undef  FT_COMPONENT
 #define FT_COMPONENT  trace_t42
@@ -128,6 +129,33 @@
 
 
  /*
+  *  POSTSCRIPT INFO SERVICE
+  *
+  */
+
+  static FT_Error
+  t42_ps_get_font_info( FT_Face          face,
+                        PS_FontInfoRec*  afont_info )
+  {
+    *afont_info = ((T42_Face)face)->type1.font_info;
+    return 0;
+  }
+
+  static FT_Int
+  t42_ps_has_glyph_names( FT_Face  face )
+  {
+    FT_UNUSED( face );
+    return 1;
+  }
+
+  static const FT_Service_PsInfoRec  t42_service_ps_info =
+  {
+    (PS_GetFontInfoFunc)    t42_ps_get_font_info,
+    (PS_HasGlyphNamesFunc)  t42_ps_has_glyph_names
+  };
+
+
+ /*
   *
   *  SERVICE LIST
   *
diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c
index 685c380..a3763c8 100644
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -154,7 +154,7 @@
                  FT_Parameter*  params )
   {
     FT_Error            error;
-    FT_Service_PsNames  psnames;
+    FT_Service_PsCMaps  psnames;
     PSAux_Service       psaux;
     FT_Face             root  = (FT_Face)&face->root;
     T1_Font             type1 = &face->type1;
@@ -169,7 +169,7 @@
     face->ttf_face       = NULL;
     face->root.num_faces = 1;
 
-    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
+    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
     face->psnames = psnames;
 
     face->psaux = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h
index c155951..6238095 100644
--- a/src/type42/t42objs.h
+++ b/src/type42/t42objs.h
@@ -22,10 +22,10 @@
 #include FT_FREETYPE_H
 #include FT_TYPE1_TABLES_H
 #include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_TYPE42_TYPES_H
+#include "t42types.h"
 #include FT_INTERNAL_OBJECTS_H
 #include FT_INTERNAL_DRIVER_H
-#include FT_SERVICE_POSTSCRIPT_NAMES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
 
 
diff --git a/include/freetype/internal/t42types.h b/src/type42/t42types.h
similarity index 100%
rename from include/freetype/internal/t42types.h
rename to src/type42/t42types.h