diff -Naur tv_grab_dvb-0.8/tv_grab_dvb.c tv_grab_dvb-0.8.new/tv_grab_dvb.c
--- tv_grab_dvb-0.8/tv_grab_dvb.c	2004-07-29 21:02:00.804715821 +0100
+++ tv_grab_dvb-0.8.new/tv_grab_dvb.c	2004-07-29 20:43:33.365383506 +0100
@@ -69,6 +69,7 @@
 int invalid_date_count = 0;
 int chan_filter	     = 0;
 int chan_filter_mask = 0;
+float const subtitleratio = 0.33;
 bool ignore_bad_dates = true;
 bool ignore_updates = true;
 bool use_chanidents = false;
@@ -269,19 +270,41 @@
    int evtlen,dsclen;
    char lang[3];
    char evt[256];
-   char dsc[256];
+   char dscbuf[256];
+   char * subtitle = 0;
+   char * dsc = 0;
    
    evtlen=*(evtdesc+5) &0xff;
    dsclen=*(evtdesc+6+evtlen) &0xff;
    strncpy((char*)&lang,(char*)(evtdesc+2),3);
    strncpy((char*)&evt,(char*)(evtdesc+6),evtlen);
-   strncpy((char*)&dsc,(char*)(evtdesc+7+evtlen),dsclen);
+   strncpy((char*)&dscbuf,(char*)(evtdesc+7+evtlen),dsclen);
    lang[3]=0;
    evt[evtlen]=0;
-   dsc[dsclen]=0;
+   dscbuf[dsclen]=0;
+   dsc = dsclen > 0 ? dscbuf : 0;
+
+   /* Find any sub-title */
+   if(dsc)
+   {
+      char * dscpos = strstr(dsc, ": ");
+      if(dscpos)
+      {
+         int const subtitlelen = (dscpos-dsc);
+         if(subtitlelen < (dsclen * subtitleratio))
+         {
+            *dscpos = '\0';
+            subtitle = dscbuf;
+            dsc = dscpos + 2;
+            dsclen = strlen(dsc);
+         }
+      }
+   }
 
    printf("\t<title lang=\"%s\">%s</title>\n",lang,xmlify(evt));
-   if (*dsc)
+   if(subtitle)
+     printf("\t<sub-title lang=\"%s\">%s</sub-title>\n",lang,xmlify(subtitle));
+   if(dsc)
      printf("\t<desc lang=\"%s\">%s</desc>\n",lang,xmlify(dsc));
    
 }
