--- octave-3.4.2/src/gl-render.cc	2011-06-09 10:22:33.000000000 -0700
+++ octave-3.4.2-mod/src/gl-render.cc	2011-08-11 10:41:48.412047000 -0700
@@ -2421,7 +2421,7 @@
 void
 opengl_renderer::draw_text (const text::properties& props)
 {
-  if (props.get_string ().empty ())
+  if (props.get_string ().is_empty ())
     return;
 
   const Matrix pos = xform.scale (props.get_data_position ());
--- octave-3.4.2/src/gl2ps-renderer.cc	2011-04-11 07:57:08.000000000 -0700
+++ octave-3.4.2-mod/src/gl2ps-renderer.cc	2011-08-11 15:28:35.312575000 -0700
@@ -199,7 +199,7 @@
 void
 glps_renderer::draw_text (const text::properties& props)
 {
-  if (props.get_string ().empty ())
+  if (props.get_string ().is_empty ())
     return;
 
   set_font (props);
@@ -223,9 +223,15 @@
   // FIXME: handle margin and surrounding box
 
   glRasterPos3d (pos(0), pos(1), pos(2));
-  gl2psTextOpt (props.get_string ().c_str (), fontname.c_str (), fontsize,
-                alignment_to_mode (halign, valign), props.get_rotation ());
-
+  // FIXME: only octave_string text is rendered, everything else is rendered ""
+  if (props.get_string ().is_string ()) {
+    gl2psTextOpt (props.get_string ().string_value ().c_str (), 
+                  fontname.c_str (), fontsize, 
+                  alignment_to_mode (halign, valign), props.get_rotation ());
+  } else {
+    gl2psTextOpt ("", fontname.c_str (), fontsize, 
+                  alignment_to_mode (halign, valign), props.get_rotation ());
+  }
 }
 
 #endif
--- octave-3.4.2/src/graphics.cc	2011-06-09 10:22:33.000000000 -0700
+++ octave-3.4.2-mod/src/graphics.cc	2011-08-11 16:56:27.794813000 -0700
@@ -4229,7 +4229,7 @@
   text::properties& xlabel_props = reinterpret_cast<text::properties&>
     (gh_manager::get_object (get_xlabel ()).get_properties ());
 
-  bool is_empty = xlabel_props.get_string ().empty ();
+  bool is_empty = xlabel_props.get_string ().is_empty ();
 
   xlabel_props.set_autopos_tag ("none");
 
@@ -4315,7 +4315,7 @@
   text::properties& ylabel_props = reinterpret_cast<text::properties&>
     (gh_manager::get_object (get_ylabel ()).get_properties ());
 
-  bool is_empty = ylabel_props.get_string ().empty ();
+  bool is_empty = ylabel_props.get_string ().is_empty ();
 
   ylabel_props.set_autopos_tag ("none");
 
@@ -4402,7 +4402,7 @@
     (gh_manager::get_object (get_zlabel ()).get_properties ());
 
   bool camAuto = cameraupvectormode_is ("auto");
-  bool is_empty = zlabel_props.get_string ().empty ();
+  bool is_empty = zlabel_props.get_string ().is_empty ();
 
   zlabel_props.set_autopos_tag ("none");
 
@@ -4756,7 +4756,7 @@
 
           Matrix text_pos = text_props.get_position ().matrix_value ();
           text_pos = xform.transform (text_pos(0), text_pos(1), text_pos(2));
-          if (text_props.get_string ().empty ())
+          if (text_props.get_string ().is_empty ())
             {
               ext(0) = std::min (ext(0), text_pos(0));
               ext(1) = std::min (ext(1), text_pos(1));
@@ -5885,8 +5885,24 @@
 
   Matrix bbox;
   // FIXME: string should be parsed only when modified, for efficiency
-  renderer.text_to_pixels (get_string (), pixels, bbox,
+  octave_value ov_string;
+  ov_string = get_string ();
+  if (ov_string.is_string ()) {
+    renderer.text_to_pixels (ov_string.string_value (), pixels, bbox,
+                             halign, valign, get_rotation ());
+  } else if (ov_string.is_char_matrix () || ov_string.is_cellstr ()) {
+    string_vector sv = ov_string.all_strings ();
+
+    std::string s("");
+    if (sv.length () > 0) {
+        octave_idx_type i = 0;
+        for (i = 0; i < sv.length () - 1; i++)
+          s += sv[i] + "\n";
+        s += sv[i];
+    }
+    renderer.text_to_pixels (s, pixels, bbox,
                            halign, valign, get_rotation ());
+  }
 
   set_extent (bbox);
 #endif
--- octave-3.4.2/src/graphics.h.in	2011-06-09 10:22:33.000000000 -0700
+++ octave-3.4.2-mod/src/graphics.h.in	2011-08-11 10:27:49.483165000 -0700
@@ -3671,7 +3671,7 @@
     // properties declarations.
 
     BEGIN_PROPERTIES (text)
-      string_property string u , ""
+      any_property string u , ""
       radio_property units u , "{data}|pixels|normalized|inches|centimeters|points"
       array_property position mu , Matrix (1, 3, 0.0)
       double_property rotation mu , 0
