diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 94807c27a98dd8ec9664f7728160c619d02421ec..004eab33a6f17953a829a782cde0d76d3806201d 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -2508,7 +2508,7 @@ static t_symbol *ab_extend_name(t_canvas *x, t_symbol *s)
     return gensym(res);
 }
 
-static int abframe = 0;
+int abframe = 0;
 static void canvas_abframe(t_canvas *x, t_float val)
 {
     abframe = val;
diff --git a/pd/src/g_canvas.h b/pd/src/g_canvas.h
index 9d1561421382c5d9e0b76b83b3110853046095f9..8be84e871592f0294e31f4849f6d3a64e23fee2d 100644
--- a/pd/src/g_canvas.h
+++ b/pd/src/g_canvas.h
@@ -580,6 +580,7 @@ EXTERN void canvas_unsetcurrent(t_canvas *x);
 EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s);
 EXTERN t_canvas *canvas_getrootfor(t_canvas *x);
 EXTERN t_canvas *canvas_getrootfor_ab(t_canvas *x);
+EXTERN int abframe;
 EXTERN void canvas_dirty(t_canvas *x, t_floatarg n);
 EXTERN int canvas_getfont(t_canvas *x);
 typedef int (*t_canvasapply)(t_canvas *x, t_int x1, t_int x2, t_int x3);
diff --git a/pd/src/x_interface.c b/pd/src/x_interface.c
index 80a8c85ad6ffa00528c0f7ab018ee1c1c6b0cb2b..6753ea626236c574d981ccfa9753e4e22a037aae 100644
--- a/pd/src/x_interface.c
+++ b/pd/src/x_interface.c
@@ -1652,8 +1652,13 @@ void *abinfo_new(void)
     }
     else
     {
-        error("abinfo: only instantiable inside an ab object");
-        x = 0;
+        if(!abframe)
+        {
+            error("abinfo: only instantiable inside an ab object");
+            x = 0;
+        }
+        else
+            x = pd_new(text_class);
     }
     return (x);
 }