diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index aab3cb18c19e02ca0adf511696b9292c5e4cba62..4599a7c3528961a45978b1dd7257a43561b6c095 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1943,14 +1943,17 @@ int canvas_open(t_canvas *x, const char *name, const char *ext,
     t_namelist *nl, thislist;
     int fd = -1;
     char listbuf[MAXPDSTRING];
+    char final_name[FILENAME_MAX];
     t_canvas *y;
     t_canvasopen co;
 
+    sys_expandpathelems(name, final_name);
+
         /* first check if "name" is absolute (and if so, try to open) */
-    if (sys_open_absolute(name, ext, dirresult, nameresult, size, bin, &fd))
+    if (sys_open_absolute(final_name, ext, dirresult, nameresult, size, bin, &fd))
         return (fd);
         /* otherwise "name" is relative; iterate over all the search-paths */
-    co.name = name;
+    co.name = final_name;
     co.ext = ext;
     co.dirresult = dirresult;
     co.nameresult = nameresult;
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index af1cbbd16c7559909c029a7e0bf42652f5c88438..02976bb1438402168d24aaf24fde146639ff8521 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -5352,7 +5352,7 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce);
 void glob_closeall(void*dummy, t_floatarg fforce)
 {
   t_canvas*x, *y;
-  for (x = pd_this->canvaslist; x; )
+  for (x = pd_this->pd_canvaslist; x; )
     {
       y=x->gl_next;
       canvas_menuclose(x, fforce); /* forced closing of this root canvas */
@@ -5367,7 +5367,7 @@ void glob_verifyquit(void *dummy, t_floatarg f)
     //fprintf(stderr, "glob_verifyquit %f\n", f);
     t_glist *g, *g2;
         /* find all root canvases */
-    for (g = pd_this->canvaslist; g; g = g->gl_next)
+    for (g = pd_this->pd_canvaslist; g; g = g->gl_next)
         if (g2 = glist_finddirty(g))
         {
             /* first open window */