diff --git a/pd/src/s_file.c b/pd/src/s_file.c
index 7c54ee3bd2d72ca20ce621744668b1c9fe1e6943..32034d04bd29c5ef584e932df0557bbaa1603f9e 100644
--- a/pd/src/s_file.c
+++ b/pd/src/s_file.c
@@ -625,8 +625,14 @@ void sys_loadpreferences( void)
         sprintf(keybuf, "path%d", i+1);
         if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING))
             break;
-        else if (!check_exists(prefbuf)) // AG: ignore non-existent paths
-            continue;
+        else {
+            // AG: need to expand ~ et al here
+            char final_name[FILENAME_MAX];
+            sys_expandpathelems(prefbuf, final_name);
+            // AG: ignore non-existent paths
+            if (!check_exists(final_name))
+                continue;
+	}
         sys_searchpath = namelist_append_files(sys_searchpath, prefbuf);
     }
     if (sys_getpreference("standardpath", prefbuf, MAXPDSTRING))