diff -ru dvb-kernel/linux/drivers/media/dvb/ttpci/av7110_hw.c dvb-kernel-epg/linux/drivers/media/dvb/ttpci/av7110_hw.c
--- dvb-kernel/linux/drivers/media/dvb/ttpci/av7110_hw.c	2004-07-18 16:25:00.000000000 -0700
+++ dvb-kernel-epg/linux/drivers/media/dvb/ttpci/av7110_hw.c	2004-07-21 21:22:39.845488336 -0700
@@ -930,11 +930,19 @@
 		DestroyOSDWindow(av7110, av7110->osdwin);
 		return 0;
 	case OSD_Open:
-		av7110->osdbpp[av7110->osdwin] = (dc->color - 1) & 7;
-		CreateOSDWindow(av7110, av7110->osdwin,
-				bpp2bit[av7110->osdbpp[av7110->osdwin]],
-				dc->x1 - dc->x0 + 1, dc->y1 - dc->y0 + 1);
-		if (!dc->data) {
+		if ((int)dc->data & OSD_OFLG_WTYPE) {
+			av7110->osdbpp[av7110->osdwin] = 0;
+			CreateOSDWindow(av7110, av7110->osdwin,
+					(enum av7110_window_display_type)dc->color,
+					dc->x1 - dc->x0 + 1, dc->y1 - dc->y0 + 1);
+		}
+		else {
+			av7110->osdbpp[av7110->osdwin] = (dc->color - 1) & 7;
+			CreateOSDWindow(av7110, av7110->osdwin,
+					bpp2bit[av7110->osdbpp[av7110->osdwin]],
+					dc->x1 - dc->x0 + 1, dc->y1 - dc->y0 + 1);
+		}
+		if (!((int)dc->data & OSD_OFLG_HIDE)) {
 			MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0);
 			SetColorBlend(av7110, av7110->osdwin);
 		}
diff -ru dvb-kernel/linux/include/linux/dvb/osd.h dvb-kernel-epg/linux/include/linux/dvb/osd.h
--- dvb-kernel/linux/include/linux/dvb/osd.h	2004-07-18 16:25:00.000000000 -0700
+++ dvb-kernel-epg/linux/include/linux/dvb/osd.h	2004-07-21 21:26:06.646049872 -0700
@@ -24,6 +24,14 @@
 #ifndef _DVBOSD_H_
 #define _DVBOSD_H_
 
+/*
+ * OSD_Open Flags (data field of osd_cmd_t):
+ *	OSD_OFLG_HIDE - New window is hidden.
+ *	OSD_OFLG_WTYPE - Color field of osd_cmt_t specificies osd window type.
+ */
+#define OSD_OFLG_HIDE	0x00000001
+#define OSD_OFLG_WTYPE	0x00000002
+
 typedef enum {
   // All functions return -2 on "not open"
   OSD_Close=1,    // ()
