diff --git a/pd/src/s_main.c b/pd/src/s_main.c
index 161b0b112d695710d68bd147fb2cffc16f6a61ac..6692d346a1fa73c090e8fc6c30d9eaa690abad52 100644
--- a/pd/src/s_main.c
+++ b/pd/src/s_main.c
@@ -168,24 +168,15 @@ static void openit(const char *dirname, const char *filename)
         close (fd);
         glob_evalfile(0, gensym(nameptr), gensym(dirbuf));
         sys_vgui("pdtk_set_current_dir %s\n", filename);
+        char actualpath[PATH_MAX];
+        char *path_ptr = NULL;
+        path_ptr = realpath(filename, actualpath);
         //sys_vgui("::pd_menus::update_recentfiles_menu .mbar.file 0\n");
-        if (strstr(filename, dirname) != NULL)
+        //fprintf(stderr, "%s %s %s %s %s\n", dirname, filename, 
+        //    strstr(filename, dirname), actualpath, path_ptr);
+        if (path_ptr != NULL)
         {
-            /* when opening files from a command line (at startup), filename
-               contains full path so, if dirname is already included in
-               filename we only pass filename variable otherwise combine the
-               two and send them together */
-#ifndef MSW
-            sys_vgui("::pd_guiprefs::update_recentfiles %s/%s 1\n",
-                dirname, filename);
-#else
-            sys_vgui("::pd_guiprefs::update_recentfiles %s\%s 1\n",
-                dirname, filename);
-#endif
-        }
-        else
-        {
-            sys_vgui("::pd_guiprefs::update_recentfiles %s 1\n", filename);
+            sys_vgui("::pd_guiprefs::update_recentfiles %s 1\n", actualpath);
         }
     }
     else