diff --git a/pd/src/s_main.c b/pd/src/s_main.c
index ce18046243fad9da7ae2510789322f6c272b0fd0..32f04efabd190bc254fb8a0144c170ab03003b7f 100644
--- a/pd/src/s_main.c
+++ b/pd/src/s_main.c
@@ -169,11 +169,18 @@ static void openit(const char *dirname, const char *filename)
         glob_evalfile(0, gensym(nameptr), gensym(dirbuf));
 		sys_vgui("pdtk_set_current_dir %s\n", filename);
         //sys_vgui("::pd_menus::update_recentfiles_menu .mbar.file 0\n");
+        if (strstr(filename, dirname) != 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);
+            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);
+            sys_vgui("::pd_guiprefs::update_recentfiles %s\%s 1\n", dirname, filename);
 #endif
+        } else {
+            sys_vgui("::pd_guiprefs::update_recentfiles %s 1\n", filename);
+        }
     }
     else
         error("%s: can't open", filename);