diff --git a/modules/access/Modules.am b/modules/access/Modules.am
index 5665477d462ef5c4900a99ac79b9376336920d07..5040b39b381cec4ed2bf9c0110adbe96e9827720 100644
--- a/modules/access/Modules.am
+++ b/modules/access/Modules.am
@@ -239,6 +239,21 @@ libdtv_plugin_la_LIBADD += libbda.la -lstdc++
 libvlc_LTLIBRARIES += libdtv_plugin.la
 endif
 
+# Old Linux DVB scanner
+libdvb_plugin_la_SOURCES = \
+	dvb/access.c \
+	dvb/linux_dvb.c \
+	dvb/scan.c dvb/scan.h \
+	dvb/dvb.h
+libdvb_plugin_la_CFLAGS = $(AM_CFLAGS)
+libdvb_plugin_la_LIBADD = $(AM_LIBADD)
+if HAVE_LINUX_DVB
+libvlc_LTLIBRARIES += libdvb_plugin.la
+if HAVE_DVBPSI
+libdvb_plugin_la_CFLAGS += $(DVBPSI_CFLAGS)
+libdvb_plugin_la_LIBADD += $(DVBPSI_LIBS)
+endif
+endif
 
 ### Network streams ###
 
diff --git a/modules/access/dvb/access.c b/modules/access/dvb/access.c
index d49ccd45ad67d7ca6c001c44e3942f154f38ef7b..8bda64edb54e4e1de8d3d167802d6d328cea9cb1 100644
--- a/modules/access/dvb/access.c
+++ b/modules/access/dvb/access.c
@@ -124,13 +124,6 @@ static int Open( vlc_object_t *p_this )
     if( *p_access->psz_access == '\0' )
         return VLC_EGENERIC;
 
-    /* Set up access */
-    p_access->pf_read = NULL;
-    p_access->pf_control = Control;
-    p_access->pf_seek = NULL;
-
-    access_InitFields( p_access );
-
     p_access->p_sys = p_sys = calloc( 1, sizeof( access_sys_t ) );
     if( !p_sys )
         return VLC_ENOMEM;
@@ -193,8 +186,14 @@ static int Open( vlc_object_t *p_this )
         p_sys->i_read_once = DVB_READ_ONCE_SCAN;
     }
 
+    /* Set up access */
     free( p_access->psz_demux );
     p_access->psz_demux = strdup( "m3u8" );
+    p_access->pf_read = NULL;
+    p_access->pf_control = Control;
+    p_access->pf_seek = NULL;
+    access_InitFields( p_access );
+
     return VLC_SUCCESS;
 }