--- Gui/app.h	 (revision 22492)
+++ Gui/app.h	 (working copy)
@@ -62,6 +62,10 @@
 #define evSetVideo	    46
 #define evSetSubtitle       47
 // 48 ...
+//#ifdef USE_DVDNAV
+#define evPlayDVDNAV	    49
+#define evMenuDVDNAV	    50
+//#endif
 
 #define evExit              1000
 
@@ -81,6 +85,12 @@
 #define evSubtitleLoaded  5011
 #define evSetVCDTrack     5012
 #define evSetURL          5013
+//#ifdef USE_DVDNAV
+#define evSetDVDNAVAudio     5014
+#define evSetDVDNAVSubtitle  5015
+#define evSetDVDNAVTitle     5016
+#define evSetDVDNAVChapter   5017
+//#endif
 
 #define evFName           7000
 #define evMovieTime       7001
--- Gui/interface.h	 (revision 22492)
+++ Gui/interface.h	 (working copy)
@@ -10,6 +10,9 @@
 #ifdef USE_DVDREAD
  #include "stream/stream.h"
 #endif
+#ifdef USE_DVDNAV
+ #include "stream/stream_dvdnav.h"
+#endif
 
 typedef struct
 {
@@ -50,6 +53,22 @@
 } guiDVDStruct;
 #endif
 
+#ifdef USE_DVDNAV
+typedef struct
+{
+ int titles;
+ int chapters;
+ int angles;
+ int current_chapter;
+ int current_title;
+ int current_angle;
+ int nr_of_audio_channels;
+ stream_language_t audio_streams[32];
+ int nr_of_subtitles;
+ stream_language_t subtitles[32];
+} guiDVDNAVStruct;
+#endif
+
 typedef struct
 {
  int message;
@@ -73,6 +92,13 @@
    int			Chapter;
 #endif
 
+#ifdef USE_DVDNAV
+   guiDVDNAVStruct      DVDNAV;
+   int			NavTitle;
+   int			NavAngle;
+   int			NavChapter;
+#endif
+
 #ifdef HAVE_VCD
    int    VCDTracks;
 #endif
@@ -133,6 +159,9 @@
 #define guiSetParameters    16
 #define guiSetAfilter       17
 #define guiSetContext       18
+#ifdef USE_DVDNAV
+#define guiSetDVDNAV        19
+#endif
 
 #define guiSetStop  0
 #define guiSetPlay  1
@@ -141,6 +170,9 @@
 #define guiDVD      	1
 #define guiVCD		2
 #define guiFilenames	4
+#ifdef USE_DVDNAV
+#define guiDVDNAV      	8
+#endif
 #define guiALL		0xffffffff
 
 extern int use_gui;
--- Gui/interface.c	 (revision 22492)
+++ Gui/interface.c	 (working copy)
@@ -45,6 +45,9 @@
 #ifdef USE_DVDREAD
 #include "stream/stream_dvd.h"
 #endif
+#ifdef USE_DVDNAV
+#include "stream/stream_dvdnav.h"
+#endif
 
 
 #include "m_config.h"
@@ -556,6 +559,9 @@
 #ifdef USE_DVDREAD
  dvd_priv_t * dvdp = (dvd_priv_t *) arg;
 #endif 
+#ifdef USE_DVDNAV
+ dvdnav_priv_t * dvdnavp = (dvdnav_priv_t *) arg;
+#endif
 
  if (guiIntfStruct.mpcontext) {
    audio_out = mpctx_get_audio_out(guiIntfStruct.mpcontext);
@@ -632,6 +638,24 @@
         guiIntfStruct.Track=dvd_title + 1;
         break;
 #endif
+#ifdef USE_DVDNAV
+   case guiSetDVDNAV:
+        guiIntfStruct.DVDNAV.titles=dvdnavp->titles_nr;
+        guiIntfStruct.DVDNAV.chapters=dvdnavp->chapters_nr;
+        guiIntfStruct.DVDNAV.current_title=dvdnavp->title;
+        guiIntfStruct.DVDNAV.current_chapter=dvdnavp->part;
+        guiIntfStruct.DVDNAV.nr_of_audio_channels=dvdnavp->nr_of_channels;
+        memcpy( guiIntfStruct.DVDNAV.audio_streams,
+		dvdnavp->audio_streams,
+		sizeof( dvdnavp->audio_streams ) );
+        guiIntfStruct.DVDNAV.nr_of_subtitles=dvdnavp->nr_of_subtitles;
+        memcpy( guiIntfStruct.DVDNAV.subtitles,
+		dvdnavp->subtitles,
+		sizeof( dvdnavp->subtitles ) );
+        guiIntfStruct.DVDNAV.current_title=dvdnavp->title;
+        guiIntfStruct.DVDNAV.current_chapter=dvdnavp->part;
+        break;
+#endif
    case guiSetStream:
 	guiIntfStruct.StreamType=stream->type;
 	switch( stream->type )
@@ -641,6 +665,11 @@
 	       guiGetEvent( guiSetDVD,(char *)stream->priv );
 	       break;
 #endif
+#ifdef USE_DVDNAV
+	  case STREAMTYPE_DVDNAV:
+	       guiGetEvent( guiSetDVDNAV,(char *)stream->priv );
+	       break;
+#endif
 #ifdef HAVE_VCD
 	  case STREAMTYPE_VCD: 
 	       {
@@ -788,6 +817,17 @@
 	       dvd_angle=guiIntfStruct.Angle;
 	       break;
 #endif
+#ifdef USE_DVDNAV
+	  case STREAMTYPE_DVDNAV:
+	       {
+	        char tmp[512];
+		sprintf( tmp,"dvdnav://");
+		guiSetFilename( guiIntfStruct.Filename,tmp );
+	       }
+	       dvd_chapter=guiIntfStruct.Chapter;
+	       dvd_angle=guiIntfStruct.Angle;
+	       break;
+#endif
 	 }
 	//if ( guiIntfStruct.StreamType != STREAMTYPE_PLAYLIST ) // Does not make problems anymore!
 	 {	
@@ -1150,6 +1190,10 @@
 #ifdef USE_DVDREAD
 	if ( (unsigned int)vparam & guiDVD ) memset( &guiIntfStruct.DVD,0,sizeof( guiDVDStruct ) );
 #endif
+#ifdef USE_DVDNAV
+	if ( (unsigned int)vparam & guiDVDNAV )
+	    memset( &guiIntfStruct.DVDNAV,0,sizeof( guiDVDNAVStruct ) );
+#endif
 #ifdef HAVE_VCD
 	if ( (unsigned int)vparam & guiVCD ) guiIntfStruct.VCDTracks=0;
 #endif
--- Gui/mplayer/mw.c	 (revision 22492)
+++ Gui/mplayer/mw.c	 (working copy)
@@ -31,6 +31,8 @@
 
 #define GUI_REDRAW_WAIT 375
 
+#define FIXME_GTK_MENU_ActivateMenuItem_PARAM 1
+
 #include "play.h"
 #include "widgets.h"
 
@@ -80,6 +82,7 @@
 {
  int iparam = (int)param;
  mixer_t *mixer = mpctx_get_mixer(guiIntfStruct.mpcontext);
+ char cmd_str[40];
 
  switch( msg )
   {
@@ -129,6 +132,16 @@
         guiIntfStruct.StreamType=STREAMTYPE_DVD;
 	goto play;
 #endif
+#ifdef USE_DVDNAV
+   case evPlayDVDNAV:
+        guiIntfStruct.DVDNAV.current_title=1;
+        guiIntfStruct.DVDNAV.current_chapter=1;
+        guiIntfStruct.DVDNAV.current_angle=1;
+play_dvdnav_2:
+	gtkSet( gtkClearStruct,0,(void *)(guiALL - guiDVDNAV) );
+	guiIntfStruct.StreamType=STREAMTYPE_DVDNAV;
+	goto play;
+#endif
    case evPlay:
    case evPlaySwitchToPause:
 play:
@@ -178,6 +191,21 @@
 		} 
                break;
 #endif
+#ifdef USE_DVDNAV
+          case STREAMTYPE_DVDNAV:
+	       gtkSet( gtkClearStruct,0,
+		    (void *)(guiALL - guiDVDNAV - guiFilenames) );
+	       if ( !dvd_device ) dvd_device=gstrdup( DEFAULT_DVD_DEVICE );
+	       mplSetFileName( NULL,dvd_device,STREAMTYPE_DVDNAV );
+	       if ( guiIntfStruct.Playing != 2 )
+	        {
+		 guiIntfStruct.Title=guiIntfStruct.DVDNAV.current_title;
+		 guiIntfStruct.Chapter=guiIntfStruct.DVDNAV.current_chapter;
+		 guiIntfStruct.Angle=guiIntfStruct.DVDNAV.current_angle;
+                 guiIntfStruct.DiskChanged=1;
+		}
+               break;
+#endif
          }
 	guiIntfStruct.NewPlay=1;
         mplPlay();
@@ -202,6 +230,50 @@
         goto play_dvd_2;
         break;
 #endif
+#ifdef USE_DVDNAV
+   case evSetDVDNAVSubtitle:
+#ifdef FIXME_GTK_MENU_ActivateMenuItem_PARAM
+        dvdsub_id=gtkPopupMenuParam;
+#else
+        dvdsub_id=iparam;
+#endif
+        sprintf(cmd_str,"sub_select %d",dvdsub_id);
+        mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+        break;
+   case evSetDVDNAVAudio:
+#ifdef FIXME_GTK_MENU_ActivateMenuItem_PARAM
+        audio_id=gtkPopupMenuParam;
+#else
+        audio_id=iparam;
+#endif
+        sprintf(cmd_str,"switch_audio %d",audio_id);
+        mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+        break;
+   case evSetDVDNAVChapter:
+#ifdef FIXME_GTK_MENU_ActivateMenuItem_PARAM
+        sprintf(cmd_str,"switch_chapter %d",gtkPopupMenuParam);
+#else
+        sprintf(cmd_str,"switch_chapter %d",iparam);
+#endif
+        mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+        guiIntfStruct.DVDNAV.current_chapter=iparam;
+        break;
+   case evSetDVDNAVTitle:
+#ifdef FIXME_GTK_MENU_ActivateMenuItem_PARAM
+        sprintf(cmd_str,"switch_title %d",gtkPopupMenuParam);
+#else
+        sprintf(cmd_str,"switch_title %d",iparam);
+#endif
+        mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+        guiIntfStruct.DVDNAV.current_title=iparam;
+	guiIntfStruct.DVDNAV.current_chapter=1;
+	guiIntfStruct.DVDNAV.current_angle=1;
+        break;
+   case evMenuDVDNAV:
+        sprintf(cmd_str,"dvdnav 5");
+        mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+        break;
+#endif
 
    case evPause:
    case evPauseSwitchToPlay:
@@ -339,6 +411,10 @@
 	  default: movie_aspect=-1;
 	 }
 	wsClearWindow( appMPlayer.subWindow );
+#ifdef USE_DVDNAV
+	if ( guiIntfStruct.StreamType == STREAMTYPE_DVDNAV ) goto play_dvdnav_2;
+	  else
+#endif
 #ifdef USE_DVDREAD
 	if ( guiIntfStruct.StreamType == STREAMTYPE_DVD || guiIntfStruct.StreamType == STREAMTYPE_VCD ) goto play_dvd_2;
 	 else 
--- Gui/mplayer/sw.c	 (revision 22492)
+++ Gui/mplayer/sw.c	 (working copy)
@@ -18,6 +18,18 @@
 extern int             boxMoved;
 extern int             sx,sy;
 extern int             i,pot;
+extern int	enable_mouse_movements;
+
+#ifdef USE_DVDNAV
+#include "input/input.h"
+#include "input/mouse.h"
+//extern int	dvdnav_window_width;
+//extern int	dvdnav_window_height;
+//extern int	dvdnav_mouse_x;
+//extern int	dvdnav_mouse_y;
+//extern int	dvdnav_mouse_button;
+//extern int	dvdnav_mouse_set;
+#endif
 
 void mplSubDraw( void )
 {
@@ -65,8 +77,19 @@
           sx=X; sy=Y;
           msButton=wsPLMouseButton;
           mplSubMoved=0;
+#ifdef USE_DVDNAV
+	  mplayer_put_key(MOUSE_BTN0);
+#endif
           break;
    case wsMoveMouse:
+#ifdef USE_DVDNAV
+	if(enable_mouse_movements)
+            {
+            char cmd_str[40];
+            sprintf(cmd_str,"set_mouse_pos %i %i", X, Y);
+            mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
+            }
+#endif
           switch ( msButton )
            {
             case wsPLMouseButton:
--- Gui/mplayer/common.c	 (revision 22492)
+++ Gui/mplayer/common.c	 (working copy)
@@ -59,6 +59,15 @@
             else strlcat( tmp,MSGTR_NoChapter,tmplen );
           break;
 #endif
+#ifdef USE_DVDNAV
+   case STREAMTYPE_DVDNAV:
+          if ( guiIntfStruct.DVDNAV.current_chapter )
+	    snprintf(tmp,tmplen,MSGTR_Chapter,
+		guiIntfStruct.DVDNAV.current_chapter );
+            else
+	    strlcat( tmp,MSGTR_NoChapter,tmplen );
+          break;
+#endif
 #ifdef HAVE_VCD
    case STREAMTYPE_VCD:
         snprintf( tmp,tmplen,MSGTR_VCDTrack,guiIntfStruct.Track );
@@ -163,6 +172,10 @@
 #ifdef USE_DVDREAD
              case STREAMTYPE_DVD:    strlcat( trbuf,"d",sizeof( trbuf ) ); break;
 #endif
+#ifdef USE_DVDNAV
+             case STREAMTYPE_DVDNAV: strlcat( trbuf,"d",sizeof( trbuf ) );
+	       break;
+#endif
              default:                strlcat( trbuf," ",sizeof( trbuf ) ); break;
             }
            break;
--- Gui/mplayer/play.c	 (revision 22492)
+++ Gui/mplayer/play.c	 (working copy)
@@ -95,6 +95,11 @@
      guiIntfStruct.DVD.current_chapter=1;
      guiIntfStruct.DVD.current_angle=1;
 #endif
+#ifdef USE_DVDNAV
+     guiIntfStruct.DVDNAV.current_title=1;
+     guiIntfStruct.DVDNAV.current_chapter=1;
+     guiIntfStruct.DVDNAV.current_angle=1;
+#endif
 
      if ( !appMPlayer.subWindow.isFullScreen && gtkShowVideoWindow)
       {
@@ -282,6 +287,10 @@
    case STREAMTYPE_DVD:
 	break;
 #endif
+#ifdef USE_DVDNAV
+   case STREAMTYPE_DVDNAV:
+	break;
+#endif
 #ifdef HAVE_VCD
    case STREAMTYPE_VCD:
 	break;
@@ -318,6 +327,16 @@
 	guiIntfStruct.Track=guiIntfStruct.DVD.current_title;
 	break;
 #endif
+#ifdef USE_DVDNAV
+   case STREAMTYPE_DVDNAV:
+	if ( --guiIntfStruct.DVDNAV.current_chapter == 0 )
+	 {
+	  guiIntfStruct.DVDNAV.current_chapter=1;
+	  if ( --guiIntfStruct.DVDNAV.current_title <= 0 ) { guiIntfStruct.DVDNAV.current_title=1; stop=1; }
+	 }
+	guiIntfStruct.Track=guiIntfStruct.DVDNAV.current_title;
+	break;
+#endif
 #ifdef HAVE_VCD
    case STREAMTYPE_VCD:
 	if ( --guiIntfStruct.Track == 0 ) { guiIntfStruct.Track=1; stop=1; }
@@ -354,6 +373,16 @@
 	guiIntfStruct.Track=guiIntfStruct.DVD.current_title;
 	break;
 #endif
+#ifdef USE_DVDNAV
+   case STREAMTYPE_DVDNAV:
+	if ( guiIntfStruct.DVDNAV.current_chapter++ == guiIntfStruct.DVDNAV.chapters )
+	 {
+	  guiIntfStruct.DVDNAV.current_chapter=1;
+	  if ( ++guiIntfStruct.DVDNAV.current_title > guiIntfStruct.DVDNAV.titles ) { guiIntfStruct.DVDNAV.current_title=guiIntfStruct.DVDNAV.titles; stop=1; }
+	 }
+	guiIntfStruct.Track=guiIntfStruct.DVDNAV.current_title;
+	break;
+#endif
 #ifdef HAVE_VCD
    case STREAMTYPE_VCD:
 	if ( ++guiIntfStruct.Track > guiIntfStruct.VCDTracks ) { guiIntfStruct.Track=guiIntfStruct.VCDTracks; stop=1; }
--- Gui/mplayer/gtk/menu.c	 (revision 22492)
+++ Gui/mplayer/gtk/menu.c	 (working copy)
@@ -379,6 +379,9 @@
 
 
 GtkWidget * DVDSubMenu;
+#ifdef USE_DVDNAV
+GtkWidget * DVDNAVSubMenu;
+#endif
 GtkWidget * DVDTitleMenu;
 GtkWidget * DVDChapterMenu;
 GtkWidget * DVDAudioLanguageMenu;
@@ -412,6 +415,9 @@
 #ifdef USE_DVDREAD
     AddMenuItem( window1, (const char*)playdvd_xpm, SubMenu,MSGTR_MENU_PlayDVD, evPlayDVD );
 #endif
+#ifdef USE_DVDNAV
+    AddMenuItem( window1, (const char*)playdvd_xpm, SubMenu,MSGTR_MENU_PlayDVDNAV, evPlayDVDNAV );
+#endif
     AddMenuItem( window1, (const char*)url_xpm, SubMenu,MSGTR_MENU_PlayURL, evSetURL );
     AddMenuItem( window1, (const char*)sub_xpm, SubMenu,MSGTR_MENU_LoadSubtitle"   ", evLoadSubtitle );
     AddMenuItem( window1, (const char*)delsub_xpm, SubMenu,MSGTR_MENU_DropSubtitle,evDropSubtitle );
@@ -529,6 +535,87 @@
         gtk_widget_set_sensitive( MenuItem,FALSE );
        }
 #endif
+#ifdef USE_DVDNAV
+   DVDNAVSubMenu=AddSubMenu( window1, (const char*)dvd_xpm, Menu,MSGTR_MENU_DVDNAV );
+    AddMenuItem( window1, (const char*)playdvd_xpm, DVDNAVSubMenu,MSGTR_MENU_PlayDisc"    ", evPlayDVDNAV );
+    MenuItem=AddMenuItem( window1, (const char*)prefs_xpm, DVDNAVSubMenu,MSGTR_MENU_MenuDVDNAV"    ", evMenuDVDNAV );
+    if (guiIntfStruct.DVDNAV.current_title==0)
+        gtk_widget_set_sensitive( MenuItem,FALSE ); else
+        gtk_widget_set_sensitive( MenuItem,TRUE );
+//    AddMenuItem( DVDNAVSubMenu,MSGTR_MENU_ShowDVDMenu, evNone );
+    AddSeparator( DVDNAVSubMenu );
+    DVDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, DVDNAVSubMenu,MSGTR_MENU_Titles );
+     if ( guiIntfStruct.DVDNAV.titles )
+      {
+       char tmp[32]; int i;
+       for ( i=1 ; i<= guiIntfStruct.DVDNAV.titles;i++ )
+        {
+         snprintf( tmp,32,MSGTR_MENU_Title,i);
+         AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDTitleMenu,tmp,
+			   guiIntfStruct.DVDNAV.current_title == i,
+			   (i << 16) + evSetDVDNAVTitle );
+        }
+      }
+      else
+       {
+        MenuItem=AddMenuItem( window1, (const char*)empty_xpm, DVDTitleMenu,MSGTR_MENU_None,evNone );
+        gtk_widget_set_sensitive( MenuItem,FALSE );
+       }
+    DVDChapterMenu=AddSubMenu( window1, (const char*)chapter_xpm, DVDNAVSubMenu,MSGTR_MENU_Chapters );
+     if ( guiIntfStruct.DVDNAV.chapters )
+      {
+       char tmp[32]; int i;
+       for ( i=1;i <= guiIntfStruct.DVDNAV.chapters;i++ )
+        {
+         snprintf( tmp,32,MSGTR_MENU_Chapter,i );
+         AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDChapterMenu,tmp,guiIntfStruct.DVDNAV.current_chapter == i,
+			   ( i << 16 ) + evSetDVDNAVChapter );
+        }
+      }
+      else
+       {
+        MenuItem=AddMenuItem( window1, (const char*)empty_xpm, DVDChapterMenu,MSGTR_MENU_None,evNone );
+        gtk_widget_set_sensitive( MenuItem,FALSE );
+       }
+    DVDAudioLanguageMenu=AddSubMenu( window1, (const char*)tongue_xpm, DVDNAVSubMenu,MSGTR_MENU_AudioLanguages );
+     if ( guiIntfStruct.DVDNAV.nr_of_audio_channels )
+      {
+       char tmp[64]; int i, id = guiIntfStruct.demuxer ? ((demuxer_t *)guiIntfStruct.demuxer)->audio->id : audio_id;
+       for ( i=0;i < guiIntfStruct.DVDNAV.nr_of_audio_channels;i++ )
+        {
+	 snprintf( tmp,64,"%s - %s %s",GetLanguage( guiIntfStruct.DVDNAV.audio_streams[i].language ),
+	   ChannelTypes[ guiIntfStruct.DVDNAV.audio_streams[i].type ],
+	   ChannelNumbers[ guiIntfStruct.DVDNAV.audio_streams[i].channels ] );
+//	 if ( id == -1 ) id=audio_id; //guiIntfStruct.DVD.audio_streams[i].id;
+         AddMenuCheckItem( window1, (const char*)dolby_xpm, DVDAudioLanguageMenu,tmp,
+			   id == guiIntfStruct.DVDNAV.audio_streams[i].id,
+			   ( guiIntfStruct.DVDNAV.audio_streams[i].id << 16 ) + evSetDVDNAVAudio );
+        }
+      }
+      else
+       {
+        MenuItem=AddMenuItem( window1, (const char*)empty_xpm, DVDAudioLanguageMenu,MSGTR_MENU_None,evNone );
+        gtk_widget_set_sensitive( MenuItem,FALSE );
+       }
+    DVDSubtitleLanguageMenu=AddSubMenu( window1, (const char*)tonguebla_xpm, DVDNAVSubMenu,MSGTR_MENU_SubtitleLanguages );
+     if ( guiIntfStruct.DVDNAV.nr_of_subtitles )
+      {
+       char tmp[64]; int i;
+       AddMenuItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,MSGTR_MENU_None,( (unsigned short)-1 << 16 ) + evSetDVDNAVSubtitle );
+       for ( i=0;i < guiIntfStruct.DVDNAV.nr_of_subtitles;i++ )
+        {
+	 snprintf( tmp,64,"%s",GetLanguage( guiIntfStruct.DVDNAV.subtitles[i].language ) );
+         AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,tmp,
+			   dvdsub_id == guiIntfStruct.DVDNAV.subtitles[i].id,
+			   ( guiIntfStruct.DVDNAV.subtitles[i].id << 16 ) + evSetDVDNAVSubtitle );
+        }
+      }
+      else
+       {
+        MenuItem=AddMenuItem( window1, (const char*)empty_xpm, DVDSubtitleLanguageMenu,MSGTR_MENU_None,evNone );
+        gtk_widget_set_sensitive( MenuItem,FALSE );
+       }
+#endif
 
 //  if ( guiIntfStruct.Playing )
    {
@@ -577,7 +664,7 @@
    }
   
   /* cheap subtitle switching for non-DVD streams */
-  if ( global_sub_size && guiIntfStruct.StreamType != STREAMTYPE_DVD )
+  if ( global_sub_size && guiIntfStruct.StreamType != STREAMTYPE_DVD && guiIntfStruct.StreamType != STREAMTYPE_DVDNAV )
    {
     int i;
     SubMenu=AddSubMenu( window1, (const char*)empty_xpm, Menu, MSGTR_MENU_Subtitles );
--- help/help_mp-en.h	 (revision 22492)
+++ help/help_mp-en.h	 (working copy)
@@ -2052,3 +2052,8 @@
 #define MSGTR_LIBASS_ErrorOpeningMemoryFont "[ass] Error opening memory font: %s\n"
 #define MSGTR_LIBASS_NoCharmaps "[ass] font face with no charmaps\n"
 #define MSGTR_LIBASS_NoCharmapAutodetected "[ass] no charmap autodetected, trying the first one\n"
+
+// mpdvdnav - gui
+#define MSGTR_MENU_DVDNAV "DVDNAV"
+#define MSGTR_MENU_PlayDVDNAV "Play DVDNAV..."
+#define MSGTR_MENU_MenuDVDNAV "Main DVD Menu"
