diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 8cabb3506b34b0b5175ddeca4ed106f7df352003..0937ce8e4be2a59ee63ea2220c22888ee3db3226 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -43,6 +43,19 @@ struct _canvasenvironment
     t_namelist *ce_path;   /* search path */
 };
 
+t_canvasenvironment *dummy_canvas_env(const char *dir)
+{
+ static t_canvasenvironment dummy_env = {
+   .ce_dir = NULL,
+   .ce_argc = 0,
+   .ce_argv = NULL,
+   .ce_dollarzero = 0,
+   .ce_path = NULL
+ };
+ dummy_env.ce_dir = gensym(dir);
+ return &dummy_env;
+}
+
 #define GLIST_DEFCANVASWIDTH 450
 #define GLIST_DEFCANVASHEIGHT 300
 
diff --git a/pd/src/g_canvas.h b/pd/src/g_canvas.h
index 44ee4e4ab581c2ae9ea79e8ef07292400260780a..9a56e360c72ff658121b51c7bfaf061a4486b66b 100644
--- a/pd/src/g_canvas.h
+++ b/pd/src/g_canvas.h
@@ -76,6 +76,8 @@ EXTERN_STRUCT _tscalar;
 EXTERN_STRUCT _canvasenvironment;
 #define t_canvasenvironment struct _canvasenvironment 
 
+extern t_canvasenvironment *dummy_canvas_env(const char *dir);
+
 EXTERN_STRUCT _fielddesc;
 #define t_fielddesc struct _fielddesc
 
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 50f8d035ca87cdd2b14f98c56e1721c33f68764b..bc78a63dd5fa6888a0c22b950574c32f761c11f6 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -2360,7 +2360,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s)
     /* save the subpatch into a separated pd file */
     t_atom at[3];
     SETSYMBOL(at, gensym(filename)); SETSYMBOL(at+1, gensym(dir)); SETFLOAT(at+2, 0.f);
-    x->tarjet->gl_env = 0xF1A6; /* gl_env is set to non-zero in order to save the subcanvas as a root canvas */
+    x->tarjet->gl_env = dummy_canvas_env(dir); /* gl_env is set to non-zero in order to save the subcanvas as a root canvas */
     typedmess(&x->tarjet->gl_pd, gensym("savetofile"), 3, at);
     x->tarjet->gl_env = 0;