diff --git a/pd/src/m_class.c b/pd/src/m_class.c
index f5926e98e93f02b65662fbc48801fa94954f60f5..54cfa965d54aef6e730e40c478d066be22ca08ca 100644
--- a/pd/src/m_class.c
+++ b/pd/src/m_class.c
@@ -318,6 +318,18 @@ void class_addcreator(t_newmethod newmethod, t_symbol *s,
     va_end(ap);
     class_addmethod(pd_objectmaker, (t_method)newmethod, s,
         vec[0], vec[1], vec[2], vec[3], vec[4], vec[5]);
+    if (class_loadsym)
+    {
+            /* if we're loading an extern it might have been invoked by a
+            longer file name; in this case, make this an admissible name
+            too. */
+        char *loadstring = class_loadsym->s_name,
+            l1 = strlen(s->s_name), l2 = strlen(loadstring);
+        if (l2 > l1 && !strcmp(s->s_name, loadstring + (l2 - l1)))
+            class_addmethod(pd_objectmaker, (t_method)newmethod,
+                class_loadsym,
+                vec[0], vec[1], vec[2], vec[3], vec[4], vec[5]);
+    }
 }
 
 void class_addmethod(t_class *c, t_method fn, t_symbol *sel,