diff --git a/osdd-set.h b/osdd-set.h
index 37eb2618ae4993e9ea021e6c041a05b064950d99..b8fbadc6fa97987523cae968b35be7d396f34d08 100644
--- a/osdd-set.h
+++ b/osdd-set.h
@@ -17,8 +17,6 @@ typedef struct _IO_FILE FILE;
 
 struct display_state;
 
-#define OSD_MAX_LINE_LEN 1024
-
 #define OSD_TRIE_LEN (26+10+1)
 
 struct osd_set_trie
@@ -44,7 +42,7 @@ struct osd_line {
   char *outline_color;
   int outline_width;
   union {					// Data dependent on type
-    char text[OSD_MAX_LINE_LEN];		// in UTF-8
+    char * text;		// in UTF-8
     unsigned int percent;			// 0..100 for percentages and slider
   } u;
 };
diff --git a/osdd.c b/osdd.c
index b1637cb1d872511c74bc8a48a7a6dc353530ad9c..e29fcde158f63276998de96210c4e7df9b310ee9 100644
--- a/osdd.c
+++ b/osdd.c
@@ -230,7 +230,7 @@ parse_msg(unsigned char *buf, int len)
       if (!key[0])
 	{
 	  l = msg_add_line(msg, OSD_TYPE_TEXT);
-	  sprintf(l->u.text, "%.*s", OSD_MAX_LINE_LEN, val);
+	  l->u.text = val;
 	}
       else if (!strcmp(key, "percentage") || !strcmp(key, "percent"))
 	{