diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index ebb490ce841fdd27ee879c987df2976f6de4ad61..48414eeab9a66a172d246348955694fd12aec56d 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1965,6 +1965,50 @@ extern void canvas_canvas_setundo(t_canvas *x);
 extern void graph_checkgop_rect(t_gobj *z, t_glist *glist,
     int *xp1, int *yp1, int *xp2, int *yp2);
 
+/* we use the following function after saving to file
+   gop-enabled canvas with hidetext disabled to check
+   whether the requested size fits the newfound canvas
+   name (as reflected in its new filename)
+
+   LATER: use this for __clickhook below and possibly
+   other places as well */
+void canvasgop_checksize(t_canvas *x)
+{
+    if (x->gl_isgraph)
+    {
+        int x1=0, y1=0, x2=0, y2=0;
+        int dirty=0;
+        if (x->gl_owner)
+        {
+            gobj_getrect((t_gobj*)x, x->gl_owner,
+                &x1, &y1, &x2, &y2);
+        }
+        else
+        {
+            graph_checkgop_rect((t_gobj*)x, x, &x1, &y1, &x2, &y2);
+        }
+        if (x2-x1 > x->gl_pixwidth)
+        {
+            x->gl_pixwidth = x2-x1;
+            dirty = 1;
+        }
+        if (y2-y1 > x->gl_pixheight)
+        { 
+            x->gl_pixheight = y2-y1;
+            dirty = 1;
+        }
+
+        if (dirty)
+        {
+            post("Adjusting canvas graph-on-parent area to accomodate its name. If you want to have a smaller graph-on-parent window, please hide graph text.");
+            canvas_dirty(x, 1);
+            canvasgop_draw_move(x,1);
+            canvas_fixlinesfor(x, (t_text *)x);
+            scrollbar_update(x);
+        }
+    }
+}
+
 void canvasgop__clickhook(t_scalehandle *sh, int newstate)
 {
     t_canvas *x = (t_canvas *)(sh->h_master);
diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c
index 87e168f3b8cfd562fc094300f645dc6854310e3e..aedca17310cb418cf8803e2cf65a6da268a7ba40 100644
--- a/pd/src/g_graph.c
+++ b/pd/src/g_graph.c
@@ -136,10 +136,6 @@ int canvas_hasarray(t_canvas *x)
 /* JMZ: emit a closebang message */
 void canvas_closebang(t_canvas *x);
 
-/* variant of the glist_findrtext found in g_rtext.c 
-   that does not throw a consistency check */
-extern t_rtext *glist_tryfindrtext(t_glist *gl, t_text *who);
-
     /* delete an object from a glist and free it */
 void glist_delete(t_glist *x, t_gobj *y)
 {
@@ -149,7 +145,7 @@ void glist_delete(t_glist *x, t_gobj *y)
         //fprintf(stderr,"glist_delete YES\n");
         t_gobj *g;
         t_object *ob;
-        t_template *tmpl;
+        t_template *tmpl = NULL;
         t_gotfn chkdsp = zgetfn(&y->g_pd, gensym("dsp"));
         t_canvas *canvas = glist_getcanvas(x);
         int drawcommand = class_isdrawcommand(y->g_pd);
@@ -251,7 +247,7 @@ void glist_delete(t_glist *x, t_gobj *y)
         if (chkdsp) canvas_update_dsp();
         if (drawcommand)
         {
-            if (tmpl && !(canvas_isgroup(canvas) && canvas->gl_unloading))
+            if (tmpl != NULL && !(canvas_isgroup(canvas) && canvas->gl_unloading))
             {
                 canvas_redrawallfortemplate(tmpl, 1);
             }
@@ -798,6 +794,8 @@ int text_ypix(t_text *x, t_glist *glist)
                 x->te_ypix / (glist->gl_screeny2 - glist->gl_screeny1)));
 }
 
+extern void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2, t_int tag);
+
     /* redraw all the items in a glist.  We construe this to mean
     redrawing in its own window and on parent, as needed in each case.
     This is too conservative -- for instance, when you draw an "open"
@@ -1225,7 +1223,8 @@ static void graph_getrect(t_gobj *z, t_glist *glist,
         //fprintf(stderr,"%d %d %d %d\n", x1, y1, x2, y2);
 
         // check if the text is not hidden and if so use that as the
-        // limit of the gop's size
+        // limit of the gop's size (we check for hidden flag inside
+        // the function we point to)
         graph_checkgop_rect(z, glist, &x1, &y1, &x2, &y2);
 
         /* fix visibility of edge items for garrays */
diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c
index c0c8be9ad7001a94fc40cfd94e7125ff46ce30c3..6d31a8a2ae9daa6e1da58d870d3c9f727d24e342 100644
--- a/pd/src/g_readwrite.c
+++ b/pd/src/g_readwrite.c
@@ -745,6 +745,7 @@ static void canvas_savetemplatesto(t_canvas *x, t_binbuf *b, int wholething)
 }
 
 void canvas_reload(t_symbol *name, t_symbol *dir, t_gobj *except);
+extern void canvasgop_checksize(t_canvas *x);
 
     /* save a "root" canvas to a file; cf. canvas_saveto() which saves the
     body (and which is called recursively.) */
@@ -765,6 +766,8 @@ static void canvas_savetofile(t_canvas *x, t_symbol *filename, t_symbol *dir)
         }
         post("saved to: %s/%s", dir->s_name, filename->s_name);
         canvas_dirty(x, 0);
+        if (x->gl_isgraph)
+            canvasgop_checksize(x);
         canvas_reload(filename, dir, &x->gl_gobj);
     }
     binbuf_free(b);
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index 88bc58b9f5eb3f59dd445eabc3fd0d6ddca2cb98..6779eff72ef33c660297775128bd45ed7a4df0d8 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -1287,12 +1287,16 @@ static void gatom_properties(t_gobj *z, t_glist *owner)
 
 /* -------------------- widget behavior for text objects ------------ */
 
+/* variant of the glist_findrtext found in g_rtext.c 
+   that does not throw a consistency check */
+extern t_rtext *glist_tryfindrtext(t_glist *gl, t_text *who);
+
 static void text_getrect(t_gobj *z, t_glist *glist,
     int *xp1, int *yp1, int *xp2, int *yp2)
 {
     //fprintf(stderr,"text_getrect\n");
     t_text *x = (t_text *)z;
-    int width, height, iscomment = (x->te_type == T_TEXT);
+    int width = 0, height = 0, iscomment = (x->te_type == T_TEXT);
     t_float x1, y1, x2, y2;
 
         /* for number boxes, we know width and height a priori, and should
@@ -1337,11 +1341,14 @@ static void text_getrect(t_gobj *z, t_glist *glist,
         built.  LATER reconsider when "vis" flag should be on and off? */
     else if (glist->gl_editor && glist->gl_editor->e_rtext)
     {
-        t_rtext *y = glist_findrtext(glist, x);
-        width = rtext_width(y);
-        height = rtext_height(y) - (iscomment << 1);
+        t_rtext *y = glist_tryfindrtext(glist, x);
+        if (y)
+        {
+            width = rtext_width(y);
+            height = rtext_height(y) - (iscomment << 1);
+        }
 
-        //fprintf(stderr,"rtext_width=%d\n", width);
+        //fprintf(stderr,"rtext width=%d height=%d\n", width, height);
 
         /*  now find if we have more inlets or outlets than
             what can comfortably fit and adjust accordingly
diff --git a/pd/src/pd-l2ork-TODO.txt b/pd/src/pd-l2ork-TODO.txt
index 259b2511f85cbe6eee234821c037b434690818e3..d1232e133385c19eab9adba584bc763b989d16de 100644
--- a/pd/src/pd-l2ork-TODO.txt
+++ b/pd/src/pd-l2ork-TODO.txt
@@ -1,7 +1,6 @@
 C:
 *messages should be aware of $0?
 *g_mycanvas does not resize its select area when the mycanvas size is smaller than the select area
-*consistency check failed: glist_findrtext when enabling gop and dragging it around?
 
 *verbosity level for the console
 *Draw SECONDARY redrect on gop scalar patchers to reflect the viewport?