diff -u pdftexdir-orig/mapfile.c pdftexdir/mapfile.c
--- pdftexdir-orig/mapfile.c	Thu Mar 30 17:36:48 2017
+++ pdftexdir/mapfile.c	Sat Apr 01 15:59:52 2017
@@ -290,8 +290,7 @@
 
     /* if for non-Type3 font both ps_name and font file are missing,
        drop this entry */
-    if ((is_type1(fm) || is_truetype(fm) || is_opentype(fm))
-        && fm->ps_name == NULL && !is_fontfile(fm)) {
+    if (!is_type3(fm) && fm->ps_name == NULL && !is_fontfile(fm)) {
         if (warn)
             pdftex_warn
                 ("invalid entry for `%s': both ps_name and font file missing",
@@ -539,8 +538,13 @@
             set_opentype(fm);
         else
             set_type1(fm);
-    } else if (is_std_t1font(fm))
-        set_type1(fm);          /* assume a builtin font is Type1 */
+    } else {
+        if (is_std_t1font(fm)) {
+          set_type1(fm);          /* assume a builtin font is Type1 */
+        } else {
+          set_type3(fm);          /* otherwise font is Type3 */
+        }
+    }
     if (check_fm_entry(fm, true) != 0)
         goto bad_line;
     /*
@@ -622,6 +626,11 @@
         pdffontmap[f] = fmlookup(f);
     assert(pdffontmap[f] != NULL);
     return pdffontmap[f] != (fmentryptr) dummy_fm_entry();
+}
+
+boolean isscalable(internalfontnumber f)
+{
+    return hasfmentry(f) && (!is_type3((fm_entry *)pdffontmap[f]));
 }
 
 /* check whether a map entry is valid for font replacement */
diff -u pdftexdir-orig/pdftex.defines pdftexdir/pdftex.defines
--- pdftexdir-orig/pdftex.defines	Fri Feb 19 11:45:32 2016
+++ pdftexdir/pdftex.defines	Sat Apr 01 16:00:16 2017
@@ -38,6 +38,7 @@
 
 { functions from mapfile.c }
 @define function hasfmentry();
+@define function isscalable();
 @define procedure checkextfm();
 @define procedure pdfmapfile();
 @define procedure pdfmapline();
diff -u pdftexdir-orig/pdftex.web pdftexdir/pdftex.web
--- pdftexdir-orig/pdftex.web	Sun Mar 19 07:40:22 2017
+++ pdftexdir/pdftex.web	Sat Apr 01 16:00:10 2017
@@ -15731,7 +15731,7 @@
     s: integer;
 begin
     w := char_width(f)(char_info(f)(c));
-    if hasfmentry(f) then begin
+    if isscalable(f) then begin
         if pdf_cur_Tm_a = 0 then begin
             call_func(divide_scaled(w, pdf_font_size[f], 4));
             pdf_delta_h := pdf_delta_h + scaled_out;
@@ -15942,7 +15942,7 @@
     {if |f| is auto expanded then ensure the base font is initialized}
     if pdf_font_auto_expand[f] and (pdf_font_blink[f] <> null_font) then begin
         b := pdf_font_blink[f];
-        if not hasfmentry(b) then
+        if not isscalable(b) then
             pdf_error("font expansion", "auto expansion is only possible with scalable fonts");
         if not font_used[b] then
             pdf_init_font(b);
@@ -15953,11 +15953,11 @@
     here: 1) |f| and |k| have the same tfm name (so they have been loaded at
     different sizes, eg 'cmr10' and 'cmr10 at 11pt'); 2) |f| has been auto
     expanded from |k|}
-    if hasfmentry(f) then begin
+    if isscalable(f) then begin
         i := head_tab[obj_type_font];
         while i <> 0 do begin
             k := obj_info(i);
-            if hasfmentry(k) and
+            if isscalable(k) and
                (pdf_font_map[k] = pdf_font_map[f]) and
                (str_eq_str(font_name[k], font_name[f]) or
                 (pdf_font_auto_expand[f] and
diff -u pdftexdir-orig/ptexlib.h pdftexdir/ptexlib.h
--- pdftexdir-orig/ptexlib.h	Fri Mar 17 08:03:14 2017
+++ pdftexdir/ptexlib.h	Sat Apr 01 16:00:28 2017
@@ -168,6 +168,7 @@
 
 /* mapfile.c */
 extern boolean hasfmentry(internalfontnumber);
+extern boolean isscalable(internalfontnumber);
 extern void fm_free(void);
 extern void fm_read_info(void);
 extern ff_entry *check_ff_exist(char *, boolean);
diff -u pdftexdir-orig/ptexmac.h pdftexdir/ptexmac.h
--- pdftexdir-orig/ptexmac.h	Thu Mar 30 17:36:48 2017
+++ pdftexdir/ptexmac.h	Sat Apr 01 16:00:36 2017
@@ -155,6 +155,7 @@
 #  define F_TYPE1             0x10
 #  define F_TRUETYPE          0x20
 #  define F_OTF               0x40
+#  define F_TYPE3             0x80
 
 #  define set_included(fm)    ((fm)->type |= F_INCLUDED)
 #  define set_subsetted(fm)   ((fm)->type |= F_SUBSETTED)
@@ -163,6 +164,7 @@
 #  define set_type1(fm)       ((fm)->type |= F_TYPE1)
 #  define set_truetype(fm)    ((fm)->type |= F_TRUETYPE)
 #  define set_opentype(fm)    ((fm)->type |= F_OTF)
+#  define set_type3(fm)       ((fm)->type |= F_TYPE3)
 
 #  define unset_included(fm)  ((fm)->type &= ~F_INCLUDED)
 #  define unset_subsetted(fm) ((fm)->type &= ~F_SUBSETTED)
@@ -171,6 +173,7 @@
 #  define unset_type1(fm)     ((fm)->type &= ~F_TYPE1)
 #  define unset_truetype(fm)  ((fm)->type &= ~F_TRUETYPE)
 #  define unset_opentype(fm)  ((fm)->type &= ~F_OTF)
+#  define unset_type3(fm)     ((fm)->type &= ~F_TYPE3)
 
 #  define is_included(fm)     (((fm)->type & F_INCLUDED) != 0)
 #  define is_subsetted(fm)    (((fm)->type & F_SUBSETTED) != 0)
@@ -179,6 +182,7 @@
 #  define is_type1(fm)        (((fm)->type & F_TYPE1) != 0)
 #  define is_truetype(fm)     (((fm)->type & F_TRUETYPE) != 0)
 #  define is_opentype(fm)     (((fm)->type & F_OTF) != 0)
+#  define is_type3(fm)        (((fm)->type & F_TYPE3) != 0)
 
 #  define fm_slant(fm)        (fm)->slant
 #  define fm_extend(fm)       (fm)->extend
diff -u pdftexdir-orig/writefont.c pdftexdir/writefont.c
--- pdftexdir-orig/writefont.c	Fri Mar 17 08:03:14 2017
+++ pdftexdir/writefont.c	Sat Apr 01 16:00:44 2017
@@ -666,7 +666,7 @@
 {
     fm_entry *fm;
     fm = hasfmentry(f) ? (fm_entry *) pdffontmap[f] : NULL;
-    if (fm == NULL || (fm->ps_name == NULL && fm->ff_name == NULL))
+    if (fm == NULL || is_type3(fm) || (fm->ps_name == NULL && fm->ff_name == NULL))
         writet3(fm, font_objnum, f);
     else
         create_fontdictionary(fm, font_objnum, f);
