Index: ipk/source.sh4/swapepg_crossepg/CONTROL/control
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/CONTROL/control	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/CONTROL/control	(revision 12090)
@@ -1,4 +1,4 @@
 Package: enigma2-plugin-swapepg-crossepg
-Version: 0.61
+Version: 0.62
 Architecture: sh4
 OE: CrossEPG by sandro cavazzoni for SKYit, SKYuk, AUsat
Index: ipk/source.sh4/swapepg_crossepg/CONTROL/preinst
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/CONTROL/preinst	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/CONTROL/preinst	(revision 12090)
@@ -25,21 +25,6 @@
 	exit 1
 fi
-echo "swapstick found...."
+echo "swapstick found...." 
 
-if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
-	SPACE=`df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1`
-	FREE=`expr $SPACE - 100`
-	SIZE=307
-	echo "checking freespace"
-	echo packege size $SIZE kb
-	echo freespace size $FREE kb
-	if  [ "$FREE" -lt "$SIZE" ]; then
-		echo "sorry no freespace left on device"
-		exit 1
-	else
-		echo ok
-	fi
-fi   
-echo "installing CrossEPG 0.61 for Swapstick..."
 buildgroup=`cat /etc/.buildgroup`
 echo "checking OS"	 
@@ -52,3 +37,7 @@
 	exit 1 	 	 
 fi
+
+echo "installing CrossEPG for Swapstick..."
+sync
+
 exit 0
Index: ipk/source.sh4/swapepg_crossepg/CONTROL/prerm
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/CONTROL/prerm	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/CONTROL/prerm	(revision 12090)
@@ -11,4 +11,4 @@
 	echo freespace size $FREE kb
 fi
-echo "removing CrossEPG v0.61"
+echo "removing CrossEPG...."
 exit 0
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/crossepg_epgmove.sh
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/crossepg/crossepg_epgmove.sh	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/crossepg_epgmove.sh	(revision 12090)
@@ -9,8 +9,20 @@
 fi
 
+if [ -f "/etc/enigma2/settings" ] # if enigma2 configuration exist
+then
+	EPGDAT=`cat /etc/enigma2/settings | grep "config\.misc\.epgcache_filename=" | sed "s/config\.misc\.epgcache_filename=//"`
+else # else default path
+	EPGDAT="/hdd/epg.dat"
+fi
+
+if [ ! -n "$EPGDAT" ]
+then
+	EPGDAT="/hdd/epg.dat"
+fi
+
 if [ -f "$DBROOT/ext.epg.dat" ] # try on configuration path
 then
 	echo copying ext.epg.dat from $DBROOT
-	$HOME/crossepg_epgcopy "$DBROOT/ext.epg.dat" /hdd/epg.dat
+	$HOME/crossepg_epgcopy "$DBROOT/ext.epg.dat" $EPGDAT
 elif [ -f "/hdd/crossepg/ext.epg.dat" ] # if we have a bad path try with default path
 then
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/crossepg_prepare_pre_start.sh
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/crossepg_prepare_pre_start.sh	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/crossepg_prepare_pre_start.sh	(revision 12090)
@@ -0,0 +1,26 @@
+#!/bin/sh
+HOME=`echo $0 | sed "s/crossepg_prepare_pre_start\.sh//"`
+ENIGMA2PRESTART="/usr/bin/enigma2_pre_start.sh"
+
+if [ -f "/var/crossepg/crossepg.config" ]
+then
+	HOME="/var/crossepg/"
+else
+	HOME="/usr/crossepg/"
+fi
+
+if [ -f "$ENIGMA2PRESTART" ]
+then
+	TMP=`cat /usr/bin/enigma2_pre_start.sh  | grep "crossepg_epgmove\.sh"`
+	if [ ! -n "$TMP" ]
+	then
+		echo "" >> $ENIGMA2PRESTART
+		echo "${HOME}crossepg_epgmove.sh" >> $ENIGMA2PRESTART
+		chmod +x $ENIGMA2PRESTART
+	fi
+else
+	echo "#!/bin/sh" > $ENIGMA2PRESTART
+	echo "${HOME}crossepg_epgmove.sh" >> $ENIGMA2PRESTART
+	chmod +x $ENIGMA2PRESTART
+fi
+	
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_en_xmltv.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_en_xmltv.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_en_xmltv.conf	(revision 12090)
@@ -0,0 +1,5 @@
+description=Devilcosta Nova English XMLTV
+protocol=xmltv
+channels_url_0=http://sgcpm.com/epg/greek.channels.xml.gz
+epg_url_0=http://sgcpm.com/epg/devilcosta.gz
+preferred_language=eng
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_gr_xmltv.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_gr_xmltv.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/devilcosta_nova_gr_xmltv.conf	(revision 12090)
@@ -0,0 +1,5 @@
+description=Devilcosta Nova Greek XMLTV
+protocol=xmltv
+channels_url_0=http://sgcpm.com/epg/greek.channels.xml.gz
+epg_url_0=http://sgcpm.com/epg/devilcostagr.gz
+preferred_language=eng
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/krkadoni_exyu_xmltv.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/crossepg/providers/krkadoni_exyu_xmltv.conf	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/krkadoni_exyu_xmltv.conf	(revision 12090)
@@ -1,5 +1,5 @@
 description=Krkadoni ExYu XMLTV
 protocol=xmltv
-channels=http://www.krkadoni.com/krkadoni.channels.xml.gz
-url=http://krkadoni.com/krkadonixmltv_exyu.gz
+channels_url_0=http://www.krkadoni.com/krkadoni.channels.xml.gz
+epg_url_0=http://krkadoni.com/krkadonixmltv_exyu.gz
 preferred_language=eng
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/linuxsat_exussr_xmltv.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/crossepg/providers/linuxsat_exussr_xmltv.conf	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/linuxsat_exussr_xmltv.conf	(revision 12090)
@@ -1,5 +1,5 @@
 description=Linuxsat ExUSSR XMLTV
 protocol=xmltv
-channels=http://linux-sat.tv/epg/ls.channels.xml.gz
-url=http://linux-sat.tv/epg/tvprogram_ua_ru.gz
+channels_url_0=http://linux-sat.tv/epg/ls.channels.xml.gz
+epg_url_0=http://linux-sat.tv/epg/tvprogram_ua_ru.gz
 preferred_language=eng
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdfrance.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdfrance.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdfrance.conf	(revision 12090)
@@ -0,0 +1,9 @@
+protocol=script
+filename=mhw2epgdownloader/mhw2epgdownloader
+arguments=-c %%homedir%%/scripts/mhw2epgdownloader/mhw1_csdfrance.conf
+description=CSD France (Astra 19.2E) - mhw2epgdownloader
+# nid ,tsid, sid
+nid=1
+tsid=1098
+sid=9101
+namespace=12582912
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdnl.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdnl.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_csdnl.conf	(revision 12090)
@@ -0,0 +1,9 @@
+protocol=script
+filename=mhw2epgdownloader/mhw2epgdownloader
+arguments=-c %%homedir%%/scripts/mhw2epgdownloader/mhw1_csdnl.conf
+description=CSD NL+ (Astra 19.2E) - mhw2epgdownloader
+# nid ,tsid, sid
+nid=53
+tsid=1105
+sid=4007
+namespace=12582912
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_cyfra.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_cyfra.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw1_cyfra.conf	(revision 12090)
@@ -0,0 +1,9 @@
+protocol=script
+filename=mhw2epgdownloader/mhw2epgdownloader
+arguments=-c %%homedir%%/scripts/mhw2epgdownloader/mhw1_cyfra.conf
+description=Cyfra+ (Hotbird 13E) - mhw2epgdownloader
+# nid ,tsid, sid
+nid=318
+tsid=11000
+sid=15706
+namespace=8519680
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_digitalplus.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_digitalplus.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_digitalplus.conf	(revision 12090)
@@ -0,0 +1,9 @@
+protocol=script
+filename=mhw2epgdownloader/mhw2epgdownloader
+arguments=-c %%homedir%%/scripts/mhw2epgdownloader/mhw2_dplus.conf
+description=DIGITAL+ Spain (Astra 19.2E) - mhw2epgdownloader
+# nid ,tsid, sid
+nid=1
+tsid=1058
+sid=30150
+namespace=12582912
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_dplushispa.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_dplushispa.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/providers/mhw2_dplushispa.conf	(revision 12090)
@@ -0,0 +1,9 @@
+protocol=script
+filename=mhw2epgdownloader/mhw2epgdownloader
+arguments=-c %%homedir%%/scripts/mhw2epgdownloader/mhw2_dplus.conf
+description=DIGITAL+ Spain (Astra 19.2E) para Hispasat - mhw2epgdownloader
+# nid ,tsid, sid
+nid=1
+tsid=1058
+sid=30150
+namespace=12582912
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdfrance.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdfrance.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdfrance.conf	(revision 12090)
@@ -0,0 +1,84 @@
+#--------------------------------------------------------------
+#
+#    mhw2epgdownloader Configuration file 
+#  
+#    EPG Data collector
+#
+#--------------------------------------------------------------
+
+#--------------------------------------------------------------
+# LOG SECCTION
+#--------------------------------------------------------------
+
+log enable = 1
+log file = /tmp/mhw1_csdfrance.log
+
+#--------------------------------------------------------------
+# SETTINGS SECCTION
+#--------------------------------------------------------------
+
+max events = 22000
+max summaries = 8000
+
+# Numero de pasadas, a mas pasadas, mas probabilidad de que descarguemos 
+# una programacion mas completa, pero mas lento
+repeat = 1
+
+# base de datos sqlite3
+dbfile = mhw2epg.db
+
+# Crear la base de datos sqlite3 en memoria
+dbinmemory = 1
+
+# Juego de caracteres
+# El formato via satelite es LATIN1 o ISO-8859-1
+# lo podemos convertir a UTF8
+latin1 to utf8 = 1
+
+# Segundos que varia programacion con respecto al satelite 
+seconds to add = 0
+
+# Ejecutar antes de la descarga
+run before = 
+
+# Ejecutar despues de la descarga y exportaciones
+# {param: xmltv channels file} {param: xmltv events file} {param: total channels} {param: total themes} {param: total events} {param: total summaries} {param: utf8}
+run after = 
+
+# dispositivo
+device = autodetect
+
+#--------------------------------------------------------------
+# EXPORT SECCTION
+#--------------------------------------------------------------
+
+# mv format 
+mv enable = 0
+mv file = /media/hdd/mv/ec-save/epg.dat
+
+# xmltv format 
+xmltv enable = 0
+xmltv events file = xmltv/tdteam.events.xml
+xmltv channels file = xmltv/tdteam.channels.xml
+
+# crossepg format
+crossepg enable = 1
+crossepg db_root path = autodetect
+crossepg libcrossepg path = autodetect
+
+#--------------------------------------------------------------
+# CHANNELS REPLACE SECCTION
+#--------------------------------------------------------------
+# channel replace = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS COPY SECCTION
+#--------------------------------------------------------------
+# channel copy = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS DELETE SECTION
+#--------------------------------------------------------------
+#channel delete = 9999:222:1:TELEBASURA
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdnl.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdnl.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_csdnl.conf	(revision 12090)
@@ -0,0 +1,84 @@
+#--------------------------------------------------------------
+#
+#    mhw2epgdownloader Configuration file 
+#  
+#    EPG Data collector
+#
+#--------------------------------------------------------------
+
+#--------------------------------------------------------------
+# LOG SECCTION
+#--------------------------------------------------------------
+
+log enable = 1
+log file = /tmp/mhw1_csdnl.log
+
+#--------------------------------------------------------------
+# SETTINGS SECCTION
+#--------------------------------------------------------------
+
+max events = 22000
+max summaries = 8000
+
+# Numero de pasadas, a mas pasadas, mas probabilidad de que descarguemos 
+# una programacion mas completa, pero mas lento
+repeat = 1
+
+# base de datos sqlite3
+dbfile = mhw2epg.db
+
+# Crear la base de datos sqlite3 en memoria
+dbinmemory = 1
+
+# Juego de caracteres
+# El formato via satelite es LATIN1 o ISO-8859-1
+# lo podemos convertir a UTF8
+latin1 to utf8 = 1
+
+# Segundos que varia programacion con respecto al satelite 
+seconds to add = 0
+
+# Ejecutar antes de la descarga
+run before = 
+
+# Ejecutar despues de la descarga y exportaciones
+# {param: xmltv channels file} {param: xmltv events file} {param: total channels} {param: total themes} {param: total events} {param: total summaries} {param: utf8}
+run after = 
+
+# dispositivo
+device = autodetect
+
+#--------------------------------------------------------------
+# EXPORT SECCTION
+#--------------------------------------------------------------
+
+# mv format 
+mv enable = 0
+mv file = /media/hdd/mv/ec-save/epg.dat
+
+# xmltv format 
+xmltv enable = 0
+xmltv events file = xmltv/tdteam.events.xml
+xmltv channels file = xmltv/tdteam.channels.xml
+
+# crossepg format
+crossepg enable = 1
+crossepg db_root path = autodetect
+crossepg libcrossepg path = autodetect
+
+#--------------------------------------------------------------
+# CHANNELS REPLACE SECCTION
+#--------------------------------------------------------------
+# channel replace = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS COPY SECCTION
+#--------------------------------------------------------------
+# channel copy = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS DELETE SECTION
+#--------------------------------------------------------------
+#channel delete = 9999:222:1:TELEBASURA
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_cyfra.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_cyfra.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw1_cyfra.conf	(revision 12090)
@@ -0,0 +1,84 @@
+#--------------------------------------------------------------
+#
+#    mhw2epgdownloader Configuration file 
+#  
+#    EPG Data collector
+#
+#--------------------------------------------------------------
+
+#--------------------------------------------------------------
+# LOG SECCTION
+#--------------------------------------------------------------
+
+log enable = 1
+log file = /tmp/mhw1_cyfra.log
+
+#--------------------------------------------------------------
+# SETTINGS SECCTION
+#--------------------------------------------------------------
+
+max events = 22000
+max summaries = 8000
+
+# Numero de pasadas, a mas pasadas, mas probabilidad de que descarguemos 
+# una programacion mas completa, pero mas lento
+repeat = 1
+
+# base de datos sqlite3
+dbfile = mhw2epg.db
+
+# Crear la base de datos sqlite3 en memoria
+dbinmemory = 1
+
+# Juego de caracteres
+# El formato via satelite es LATIN1 o ISO-8859-1
+# lo podemos convertir a UTF8
+latin1 to utf8 = 1
+
+# Segundos que varia programacion con respecto al satelite 
+seconds to add = 0
+
+# Ejecutar antes de la descarga
+run before = 
+
+# Ejecutar despues de la descarga y exportaciones
+# {param: xmltv channels file} {param: xmltv events file} {param: total channels} {param: total themes} {param: total events} {param: total summaries} {param: utf8}
+run after = 
+
+# dispositivo
+device = autodetect
+
+#--------------------------------------------------------------
+# EXPORT SECCTION
+#--------------------------------------------------------------
+
+# mv format 
+mv enable = 0
+mv file = /media/hdd/mv/ec-save/epg.dat
+
+# xmltv format 
+xmltv enable = 0
+xmltv events file = xmltv/tdteam.events.xml
+xmltv channels file = xmltv/tdteam.channels.xml
+
+# crossepg format
+crossepg enable = 1
+crossepg db_root path = autodetect
+crossepg libcrossepg path = autodetect
+
+#--------------------------------------------------------------
+# CHANNELS REPLACE SECCTION
+#--------------------------------------------------------------
+# channel replace = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS COPY SECCTION
+#--------------------------------------------------------------
+# channel copy = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS DELETE SECTION
+#--------------------------------------------------------------
+#channel delete = 9999:222:1:TELEBASURA
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplus.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplus.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplus.conf	(revision 12090)
@@ -0,0 +1,113 @@
+#--------------------------------------------------------------
+#
+#    mhw2epgdownloader Configuration file 
+#  
+#    EPG Data collector
+#
+#--------------------------------------------------------------
+
+#--------------------------------------------------------------
+# LOG SECCTION
+#--------------------------------------------------------------
+
+log enable = 1
+log file = /tmp/mhw2_dplus.log
+
+#--------------------------------------------------------------
+# SETTINGS SECCTION
+#--------------------------------------------------------------
+
+max events = 22000
+max summaries = 8000
+
+# Numero de pasadas, a mas pasadas, mas probabilidad de que descarguemos 
+# una programacion mas completa, pero mas lento
+repeat = 1
+
+# base de datos sqlite3
+dbfile = mhw2epg.db
+
+# Crear la base de datos sqlite3 en memoria
+dbinmemory = 1
+
+# Juego de caracteres
+# El formato via satelite es LATIN1 o ISO-8859-1
+# lo podemos convertir a UTF8
+latin1 to utf8 = 1
+
+# Segundos que varia programacion con respecto al satelite 
+seconds to add = 0
+
+# Ejecutar antes de la descarga
+run before = 
+
+# Ejecutar despues de la descarga y exportaciones
+# {param: xmltv channels file} {param: xmltv events file} {param: total channels} {param: total themes} {param: total events} {param: total summaries} {param: utf8}
+run after = 
+
+# dispositivo
+device = autodetect
+
+#--------------------------------------------------------------
+# EXPORT SECCTION
+#--------------------------------------------------------------
+
+# mv format 
+mv enable = 0
+mv file = /media/hdd/mv/ec-save/epg.dat
+
+# xmltv format 
+xmltv enable = 0
+xmltv events file = xmltv/tdteam.events.xml
+xmltv channels file = xmltv/tdteam.channels.xml
+
+# crossepg format
+crossepg enable = 1
+crossepg db_root path = autodetect
+crossepg libcrossepg path = autodetect
+
+#--------------------------------------------------------------
+# CHANNELS REPLACE SECCTION
+#--------------------------------------------------------------
+# channel replace = service:transponder:network:name -> service:transponder:network:name
+
+channel replace = 746c:3f0:1:C+ACCION -> 7472:3F0:1:C+ACCION
+channel replace = 746d:3f0:1:C+COMEDIA -> 7473:3F0:1:C+COMEDIA
+channel replace = 746e:3f0:1:C+DCINE -> 7474:3F0:1:C+DCINE
+#channel replace = 778e:424:1:C+FUTBOL -> 779c:424:1:C+FUTBOL
+#channel replace = 778f:424:1:C+DEPORTES -> 779d:424:1:C+DEPORTES
+
+
+channel replace = 7611:408:1:C+LIGA HD -> 7852:0:0:C+LIGA HD
+channel replace = 7612:408:1:CANAL+HD -> 74CC:3F8:1:CANAL+HD
+channel replace = 7613:408:1:C+ACCISN HD -> 7500:420:1:C+ACCISN HD
+channel replace = 7614:408:1:C+COMEDIA HD -> 7851:41A:1:C+COMEDIA HD
+channel replace = 7615:408:1:C+DCINE HD -> 7502:420:1:C+DCINE HD
+channel replace = 7616:408:1:C+XTRA HD -> 74CF:3F8:1:C+XTRA HD
+channel replace = 7617:408:1:CINEMAGIC HD -> 7820:428:1:CINEMAGIC HD
+channel replace = 7618:408:1:C+FUTBOL HD -> 74CD:3F8:1:C+FUTBOL HD
+channel replace = 7619:408:1:C+DEPORT HD -> 7822:428:1:C+DEPORT HD
+channel replace = 761a:408:1:EUROSPORT HD -> 7501:420:1:EUROSPORT HD
+channel replace = 7624:422:1:COSMO HD -> 74FF:420:1:COSMO HD
+channel replace = 761b:408:1:CALLE 13 HD -> 781F:428:1:CALLE 13 HD
+channel replace = 761c:408:1:FOX HD -> 74FE:420:1:FOX HD
+channel replace = 761d:408:1:AXN HD -> 7850:41a:1:AXN HD
+channel replace = 761e:408:1:NATGEOGRAPHD -> 7821:428:1:NATGEOGRAPHD
+channel replace = 7623:422:1:VIAJAR HD -> 74CE:3F8:1:VIAJAR HD
+channel replace = 761F:408:1:MTVNHD -> 6FB8:42C:1:MTVNHD
+channel replace = 7620:408:1:MEZZO HD -> 781E:428:1:MEZZO HD
+#channel replace = 7854:41a:1:TAQUILLA HD -> 7854:41a:1:TAQUILLA HD
+channel replace = 7621:408:1:CANAL+ 3D -> 7855:41A:1:CANAL+ 3D
+channel replace = 75fa:408:1:C+DEPORT2 HD -> 7853:41A:1:C+DEPORT2 HD
+
+
+#--------------------------------------------------------------
+# CHANNELS COPY SECCTION
+#--------------------------------------------------------------
+# channel copy = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS DELETE SECTION
+#--------------------------------------------------------------
+#channel delete = 9999:222:1:TELEBASURA
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplushispa.conf
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplushispa.conf	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/mhw2_dplushispa.conf	(revision 12090)
@@ -0,0 +1,130 @@
+#--------------------------------------------------------------
+#
+#    mhw2epgdownloader Configuration file 
+#  
+#    EPG Data collector
+#
+#--------------------------------------------------------------
+
+#--------------------------------------------------------------
+# LOG SECCTION
+#--------------------------------------------------------------
+
+log enable = 1
+log file = /tmp/mhw2_dplushispa.log
+
+#--------------------------------------------------------------
+# SETTINGS SECCTION
+#--------------------------------------------------------------
+
+max events = 22000
+max summaries = 8000
+
+# Numero de pasadas, a mas pasadas, mas probabilidad de que descarguemos 
+# una programacion mas completa, pero mas lento
+repeat = 1
+
+# base de datos sqlite3
+dbfile = mhw2epg.db
+
+# Crear la base de datos sqlite3 en memoria
+dbinmemory = 1
+
+# Juego de caracteres
+# El formato via satelite es LATIN1 o ISO-8859-1
+# lo podemos convertir a UTF8
+latin1 to utf8 = 1
+
+# Segundos que varia programacion con respecto al satelite 
+seconds to add = 0
+
+# Ejecutar antes de la descarga
+run before = 
+
+# Ejecutar despues de la descarga y exportaciones
+# {param: xmltv channels file} {param: xmltv events file} {param: total channels} {param: total themes} {param: total events} {param: total summaries} {param: utf8}
+run after = 
+
+# dispositivo
+device = autodetect
+
+#--------------------------------------------------------------
+# EXPORT SECCTION
+#--------------------------------------------------------------
+
+# mv format 
+mv enable = 0
+mv file = /media/hdd/mv/ec-save/epg.dat
+
+# xmltv format 
+xmltv enable = 0
+xmltv events file = xmltv/tdteam.events.xml
+xmltv channels file = xmltv/tdteam.channels.xml
+
+# crossepg format
+crossepg enable = 1
+crossepg db_root path = autodetect
+crossepg libcrossepg path = autodetect
+
+#--------------------------------------------------------------
+# CHANNELS REPLACE SECCTION
+#--------------------------------------------------------------
+# channel replace = service:transponder:network:name -> service:transponder:network:name
+
+channel replace = 76C7:40E:1:TCM MODERNO -> 2E:2:31:TCM MODERNO
+channel replace = 760C:408:1:TCM CLÁSICO -> 2F:7:31:TCM CLÁSICO
+channel replace = 77C1:40A:1:HOLLYWOOD -> 30:C:31:HOLLYWOOD
+channel replace = 7790:424:1:CALLE 13 -> 14:1:31:CALLE 13
+channel replace = 7477:3F0:1:AXN -> 16:4:31:AXN
+channel replace = 746F:3F0:1:FOX -> 15:4:31:FOX
+channel replace = 7468:3F0:1:FOX CRIME -> 13:4:31:FOX CRIME
+channel replace = 7796:424:1:SYFY -> 19:1:31:SYFY
+channel replace = 77C9:40A:1:TNT -> 18:C:31:TNT
+channel replace = 7471:3F0:1:SONY TV -> 11:4:31:SONY TV
+channel replace = 76C8:40E:1:PAR. COMEDY -> 17:2:31:PARAMOUNT C
+channel replace = 7730:416:1:COSMOPOLITAN -> 12:9:31:COSMOPOLITAN
+channel replace = 756C:412:1:NEOX -> 1C:6:31:NEOX
+channel replace = 7469:3F0:1:NOVA -> 1D:4:31:NOVA
+channel replace = 77BC:40A:1:FDF -> 1A:C:31:FDF
+channel replace = 778D:424:1:NAT GEOGRAPH -> 3D:1:31:NAT GEOGRAPH
+channel replace = 773A:416:1:CANAL ODISEA -> 3C:9:31:CANAL ODISEA
+channel replace = 7797:424:1:DISCOVERY -> 3E:1:31:DISCOVERY
+channel replace = 7731:416:1:HISTORIA -> 40:9:31:HISTORIA
+channel replace = 772D:416:1:BIO -> 41:9:31:BIO
+channel replace = 76CE:40E:1:CANAL COCINA -> 42:2:31:CANAL COCINA
+channel replace = 7795:424:1:DECASA -> 43:1:31:DECASA
+channel replace = 7798:424:1:HOGARUTIL -> 44:1:31:HOGARUTIL
+channel replace = 76C9:40E:1:VIAJAR -> 3F:2:31:VIAJAR
+channel replace = 772B:416:1:CAZA Y PESCA -> 3B:9:31:CAZA Y PESCA
+channel replace = 77F3:404:1:BARÇA TV -> 3A:5:31:BARÇA TV
+channel replace = 7601:408:1:R. MADRID TV -> 39:7:31:RMTV
+channel replace = 778E:424:1:C+ FÚTBOL -> 8:1:31:C+ FÚTBOL
+channel replace = 778F:424:1:C+ DEPORTES -> 34:1:31:C+ DEPORTES
+channel replace = 7792:424:1:CANAL+ LIGA -> A:1:31:CANAL+ LIGA
+channel replace = 76C4:40E:1:SPORTMANÍA -> 36:2:31:SPORTMANÍA
+channel replace = 77D8:40A:1:EUROSPORT -> 37:C:31:EUROSPORT
+channel replace = 76CC:40E:1:TELEDEPORTE -> 38:2:31:TELEDEPORTE
+channel replace = 7789:424:1:CANAL+ GOLF -> 35:1:31:CANAL+ GOLF
+channel replace = 2756:402:1:ANDALUCIA TV -> 5A:3:31:ANDALUCÍA TV
+channel replace = 2755:402:1:TELEMADRID SAT -> 5B:3:31:TMADRID SAT
+channel replace = 2757:402:1:TV3 CAT -> 5D:3:31:TV3CAT
+channel replace = 77F5:404:1:C. ESTRELLAS -> 98:5:31:C.ESTRELLAS
+channel replace = 1B62:3FC:1:RedeRecord -> 18:E:1:TV Record
+channel replace = 7738:416:1:24 HORAS -> 46:9:31:24 HORAS
+
+channel replace = 7472:3F0:1:C+ ACCIÓN -> 29:4:31:C+ ACCIÓN
+channel replace = 7473:3F0:1:C+ COMEDIA -> 2A:4:31:C+ COMEDIA
+channel replace = 7474:3F0:1:C+ DCINE -> 2B:4:31:C+ DCINE
+channel replace = 779c:424:1:C+ FÚTBOL -> 8:1:31:C+ FÚTBOL
+channel replace = 779d:424:1:C+ DEPORTES -> 34:1:31:C+ DEPORTES
+
+#--------------------------------------------------------------
+# CHANNELS COPY SECCTION
+#--------------------------------------------------------------
+# channel copy = service:transponder:network:name -> service:transponder:network:name
+
+
+#--------------------------------------------------------------
+# CHANNELS DELETE SECTION
+#--------------------------------------------------------------
+#channel delete = 9999:222:1:TELEBASURA
Index: ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/version.txt
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/version.txt	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/crossepg/scripts/mhw2epgdownloader/version.txt	(revision 12090)
@@ -0,0 +1,1 @@
+1.0.9
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_about.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_about.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_about.py	(revision 12090)
@@ -54,15 +54,20 @@
 			version = "unknow version"
 
-		credit = "SIFTeam CrossEPG %s (c) 2009-2010 Sandro Cavazzoni\n" % version
+		credit = "SIFTeam CrossEPG %s (c) 2009-2011 Sandro Cavazzoni\n" % version
 		credit += "http://code.google.com/p/crossepg/\n\n"
 		credit += "Application credits:\n"
 		credit += "- Sandro Cavazzoni aka skaman (main developer)\n"
 		credit += "- Ambrosa (scripts developer)\n"
+		credit += "- Sergiotas (mhw2epgdownloader author)\n"
+		credit += "- u Killer Bestia (server side application maintainer)\n"
 		credit += "- Spaeleus (italian translations)\n"
-		credit += "- Bodyan (ukrainian translations)\n\n"
+		credit += "- Bodyan (ukrainian translations)\n"
+		credit += "- Kosmacz (polish translations)\n"
+		credit += "- Ku4a (russian translations)\n\n"
 		credit += "Sources credits:\n"
 		credit += "- Rytec http://www.rytec.be (xmltv providers for many countries)\n"
-		credit += "- Krkadoni http://www.krkadoni.com/ (xmltv provider for Ex Yugoslavia and various xepgdb sources maintainer)\n"
-		credit += "- Bodyan and dillinger http://linux-sat.tv/ (xmltv provider for ex USSR channels)"
+		credit += "- Krkadoni http://www.krkadoni.com/ (xmltv provider for Ex Yugoslavia)\n"
+		credit += "- Bodyan and dillinger http://linux-sat.tv/ (xmltv provider for ex USSR channels)\n"
+		credit += "- Devilcosta http://sgcpm.com/ (xmltv provider for nova channels in greek and english)"
 		self["about"].setText(credit)
 
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_loader.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_loader.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_loader.py	(revision 12090)
@@ -139,5 +139,9 @@
 	
 	def loadEPG(self):
-		cmd = "%s/crossepg_epgcopy %s/ext.epg.dat /hdd/epg.dat" % (self.home_directory, self.db_root)
+		try:
+			cmd = "%s/crossepg_epgcopy %s/ext.epg.dat %s" % (self.home_directory, self.db_root, config.misc.epgcache_filename.value)
+		except Exception, e:
+			cmd = "%s/crossepg_epgcopy %s/ext.epg.dat /hdd/epg.dat" % (self.home_directory, self.db_root)
+			
 		print "[CrossEPG_Loader] %s" % (cmd)
 		os.system(cmd)
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_main.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_main.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_main.py	(revision 12090)
@@ -16,5 +16,5 @@
 		self.patchtype = getEPGPatchType()
 		
-	def downloader(self, session, **kwargs):
+	def downloader(self, session):
 		self.session = session
 		crossepg_auto.lock = True
@@ -26,4 +26,10 @@
 			self.config.deleteLog()
 			self.session.openWithCallback(self.downloadCallback, CrossEPG_Downloader, self.config.providers)
+
+	def loaderAsPlugin(self, session):
+		self.session = session
+		crossepg_auto.lock = True
+		crossepg_auto.stop()
+		self.loader()
 
 	def downloadCallback(self, ret):
@@ -73,5 +79,5 @@
 		crossepg_auto.lock = False
 
-	def setup(self, session, **kwargs):
+	def setup(self, session):
 		crossepg_auto.lock = True
 		crossepg_auto.stop()
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_menu.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_menu.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_menu.py	(revision 12090)
@@ -11,4 +11,6 @@
 from crossepg_loader import CrossEPG_Loader
 from crossepg_ordering import CrossEPG_Ordering
+from crossepg_rytec_update import CrossEPG_Rytec_Update
+from crossepg_xepgdb_update import CrossEPG_Xepgdb_Update
 from crossepg_locale import _
 
@@ -58,5 +60,8 @@
 		l.append(self.buildListEntry(_("XEPGDB providers"), "xepgdb.png"))
 		l.append(self.buildListEntry(_("Scripts providers"), "scripts.png"))
+		l.append(self.buildListEntry(_("MHW2 providers"), "opentv.png"))
 		l.append(self.buildListEntry(_("Providers start order"), "reorder.png"))
+		l.append(self.buildListEntry(_("Update rytec providers"), "rytec_small.png"))
+		l.append(self.buildListEntry(_("Update xepgdb providers"), "xepgdb.png"))
 		l.append(self.buildListEntry(_("Download now"), "download.png"))
 		l.append(self.buildListEntry(_("Force csv import now"), "csv.png"))
@@ -105,18 +110,24 @@
 			self.session.open(CrossEPG_Providers, "script")
 		elif index == 5:
+			self.session.open(CrossEPG_Providers, "mhw2")
+		elif index == 6:
 			self.session.open(CrossEPG_Ordering)
-		elif index == 6:
+		elif index == 7:
+			self.session.open(CrossEPG_Rytec_Update)
+		elif index == 8:
+			self.session.open(CrossEPG_Xepgdb_Update)
+		elif index == 9:
 			self.config.load()
 			self.config.deleteLog()
 			self.downloader()
-		elif index == 7:
+		elif index == 10:
 			self.importer()
-		elif index == 8:
+		elif index == 11:
 			self.converter()
-		elif index == 9:
+		elif index == 12:
 			self.loader()
-		elif index == 10:
+		elif index == 13:
 			self.session.open(CrossEPG_Info)
-		elif index == 11:
+		elif index == 14:
 			self.session.open(CrossEPG_About)
 		
@@ -158,5 +169,5 @@
 				if self.config.download_manual_reboot:
 					from Screens.Standby import TryQuitMainloop
-					session.open(TryQuitMainloop, 3)
+					self.session.open(TryQuitMainloop, 3)
 
 	def loader(self):
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_providers.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_providers.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_providers.py	(revision 12090)
@@ -63,13 +63,28 @@
 		elif self.protocol == "xepgdb":
 			self.setTitle("CrossEPG - XEPGDB providers")
-		elif self.protocol == "scripts":
+		elif self.protocol == "script":
 			self.setTitle("CrossEPG - Scripts providers")
+		elif self.protocol == "mhw2":
+			self.setTitle("CrossEPG - MHW2 providers")
 
 	def buildList(self):
 		self.list = []
 		i = 0
+		protocol = self.protocol
+		if protocol == "mhw2":
+			protocol = "script"
+		print protocol
+		print self.protocol
 		for provider in self.providers[0]:
-			if self.providers[2][i] == self.protocol:
-				self.list.append(self.buildListEntry(provider, self.providers[1][i], self.config.providers.count(provider) > 0))
+			if self.providers[2][i] == protocol:
+				if protocol == "script":
+					description = self.providers[1][i].lower()
+					# we use find("mhw2") as workaround because mhw2 doesn't exist as provider type
+					if self.protocol == "mhw2" and description.find("mhw2") != -1:
+						self.list.append(self.buildListEntry(provider, self.providers[1][i], self.config.providers.count(provider) > 0))
+					elif self.protocol == "script" and description.find("mhw2") == -1:
+						self.list.append(self.buildListEntry(provider, self.providers[1][i], self.config.providers.count(provider) > 0))
+				else:
+					self.list.append(self.buildListEntry(provider, self.providers[1][i], self.config.providers.count(provider) > 0))
 			i += 1
 
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_rytec_update.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_rytec_update.py	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_rytec_update.py	(revision 12090)
@@ -0,0 +1,168 @@
+from enigma import getDesktop, eTimer
+
+from Components.Label import Label
+from Components.Pixmap import Pixmap
+from Components.ProgressBar import ProgressBar
+
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+
+from crossepglib import *
+from crossepg_locale import _
+
+import httplib
+import xml.etree.cElementTree
+import re
+import os
+import random
+
+class CrossEPG_Rytec_Source(object):
+	def __init__(self):
+		self.channels_urls = []
+		self.epg_urls = []
+		self.description = ""
+
+class CrossEPG_Rytec_Update(Screen):
+	def __init__(self, session):
+		if (getDesktop(0).size().width() < 800):
+			skin = "%s/skins/downloader_sd.xml" % os.path.dirname(sys.modules[__name__].__file__)
+			self.isHD = 0
+		else:
+			skin = "%s/skins/downloader_hd.xml" % os.path.dirname(sys.modules[__name__].__file__)
+			self.isHD = 1
+		f = open(skin, "r")
+		self.skin = f.read()
+		f.close()
+		Screen.__init__(self, session)
+		
+		self.sources = []
+		self.session = session
+		self.mirrors = []
+		
+		self["background"] = Pixmap()
+		self["action"] = Label(_("Updating rytec providers..."))
+		self["status"] = Label("")
+		self["progress"] = ProgressBar()
+		self["progress"].hide()
+		
+		self.config = CrossEPG_Config()
+		self.config.load()
+		
+		self.timer = eTimer()
+		self.timer.callback.append(self.start)
+		
+		self.onFirstExecBegin.append(self.firstExec)
+		
+	def firstExec(self):
+		if self.isHD:
+			self["background"].instance.setPixmapFromFile("%s/images/background_hd.png" % (os.path.dirname(sys.modules[__name__].__file__)))
+		else:
+			self["background"].instance.setPixmapFromFile("%s/images/background.png" % (os.path.dirname(sys.modules[__name__].__file__)))
+		self.timer.start(100, 1)
+		
+	def start(self):
+		self.loadSourceList()
+		if self.load():
+			self.save(self.config.home_directory + "/providers/")
+			self.session.open(MessageBox, _("%d providers updated") % len(self.sources), type = MessageBox.TYPE_INFO, timeout = 5)	
+		else:
+			self.session.open(MessageBox, _("Cannot retrieve rytec sources"), type = MessageBox.TYPE_ERROR, timeout = 10)	
+		self.close()
+
+	def loadSourceList(self):
+		try:
+			print "downloading source list from http://www.rytec.be/tools/crossepgsources.gz"
+			conn = httplib.HTTPConnection("www.rytec.be")
+			conn.request("GET", "/tools/crossepgsources.gz")
+			httpres = conn.getresponse()
+			if httpres.status == 200:
+				f = open("/tmp/crossepg_rytec_tmp", "w")
+				f.write(httpres.read())
+				f.close()
+				gzip = os.popen("/bin/gzip -d -c /tmp/crossepg_rytec_tmp")
+				self.mirrors = gzip.read().split("\n")
+				gzip.close()
+				random.shuffle(self.mirrors)
+				os.unlink("/tmp/crossepg_rytec_tmp")
+			else:
+				print "http error: %d (%s)" % (httpres.status, "http://www.rytec.be/tools/crossepgsources.gz")
+		except Exception, e:
+			print e
+				
+	def load(self):
+		ret = False
+		for mirror in self.mirrors:
+			try:
+				print "downloading from %s" % (mirror)
+				smirror = mirror.lstrip("http://")
+				host = smirror.split("/")[0]
+				path = smirror.lstrip(host)
+				conn = httplib.HTTPConnection(host)
+				conn.request("GET", path)
+				httpres = conn.getresponse()
+				if httpres.status == 200:
+					f = open("/tmp/crossepg_rytec_tmp", "w")
+					f.write(httpres.read())
+					f.close()
+					self.loadFromFile("/tmp/crossepg_rytec_tmp")
+					os.unlink("/tmp/crossepg_rytec_tmp")
+					ret = True
+				else:
+					print "http error: %d (%s)" % (httpres.status, mirror)
+			except Exception, e:
+				print e
+		return ret
+
+	def getServer(self, description):
+		for source in self.sources:
+			if source.description == description:
+				return source
+		return None
+			
+	def loadFromFile(self, filename):
+		mdom = xml.etree.cElementTree.parse(filename)
+		root = mdom.getroot()
+
+		for node in root:
+			if node.tag == "source":
+				source = CrossEPG_Rytec_Source()
+				source.channels_urls.append(node.get("channels"))
+				for childnode in node:
+					if childnode.tag == "description":
+						source.description = childnode.text
+					elif childnode.tag == "url":
+						source.epg_urls.append(childnode.text)
+
+				oldsource = self.getServer(source.description)
+				if oldsource == None:
+					self.sources.append(source)
+				else:
+					if len(source.epg_urls) > 0:
+						if source.epg_urls[0] not in oldsource.epg_urls:
+							oldsource.epg_urls.append(source.epg_urls[0])
+					if len(source.channels_urls) > 0:
+						if source.channels_urls[0] not in oldsource.channels_urls:
+							oldsource.channels_urls.append(source.channels_urls[0])
+				
+	def save(self, destination):
+		os.system("rm -f " + destination + "/rytec_*.conf")
+		for source in self.sources:
+			p = re.compile('[/:()<>|?*\s-]|(\\\)')
+			filename = p.sub('_', source.description).lower()
+			if filename[:6] != "rytec_":
+				filename = "rytec_" + filename
+			f = open(destination + "/" + filename + ".conf", "w")
+			f.write("description=" + source.description + "\n")
+			f.write("protocol=xmltv\n");
+			count = 0
+			for url in source.channels_urls:
+				f.write("channels_url_" + str(count) + "=" + url + "\n")
+				count += 1
+				
+			count = 0
+			for url in source.epg_urls:
+				f.write("epg_url_" + str(count) + "=" + url + "\n")
+				count += 1
+			f.write("preferred_language=eng");
+			f.close()
+			
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_setup.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepg_setup.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_setup.py	(revision 12090)
@@ -4,5 +4,5 @@
 from Screens.MessageBox import MessageBox
 
-from Components.config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, ConfigYesNo, ConfigSelection, ConfigClock
+from Components.config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, ConfigYesNo, ConfigSelection, ConfigClock, config, configfile
 from Components.ConfigList import ConfigList
 from Components.Button import Button
@@ -21,4 +21,6 @@
 
 from time import *
+
+import os
 
 class CrossEPG_Setup(Screen):
@@ -53,4 +55,5 @@
 		self.show_extension = self.config.show_extension
 		self.show_plugin = self.config.show_plugin
+		self.show_force_reload_as_plugin = self.config.show_force_reload_as_plugin
 
 		# make devices entries
@@ -60,5 +63,5 @@
 
 		for partition in harddiskmanager.getMountedPartitions():
-			if (partition.mountpoint != '/') and (partition.mountpoint != ''): # and self.isMountedInRW(partition.mountpoint):
+			if (partition.mountpoint != '/') and (partition.mountpoint != '') and self.isMountedInRW(partition.mountpoint):
 				self.mountpoint.append(partition.mountpoint + "/crossepg")
 
@@ -114,4 +117,12 @@
 		self.makeList()
 
+	def isMountedInRW(self, path):
+		testfile = path + "/tmp-rw-test"
+		os.system("touch " + testfile)
+		if os.path.exists(testfile):
+			os.system("rm -f " + testfile)
+			return True
+		return False
+		
 	def showWarning(self):	
 		self.session.open(MessageBox, _("PLEASE READ!\nNo disk found. An hard drive or an usb pen is HARDLY SUGGESTED. If you still want use your internal flash pay attention to:\n(1) If you don't have enough free space your box may completely block and you need to flash it again\n(2) Many write operations on your internal flash may damage your flash memory"), type = MessageBox.TYPE_ERROR)
@@ -188,4 +199,5 @@
 		self.list.append((_("Show as plugin"), ConfigYesNo(self.config.show_plugin > 0)))
 		self.list.append((_("Show as extension"), ConfigYesNo(self.config.show_extension > 0)))
+		self.list.append((_("Show 'Force reload' as plugin"), ConfigYesNo(self.config.show_force_reload_as_plugin > 0)))
 
 		self["config"].setList(self.list)
@@ -233,4 +245,5 @@
 		self.config.show_plugin = int(self.list[i][1].getValue())
 		self.config.show_extension = int(self.list[i+1][1].getValue())
+		self.config.show_force_reload_as_plugin = int(self.list[i+2][1].getValue())
 
 		if redraw:
@@ -247,5 +260,5 @@
 
 		if index == 0:
-			self["information"].setText(_("Drive where you save data.\nThe drive MUST be mounted in rw"))
+			self["information"].setText(_("Drive where you save data.\nThe drive MUST be mounted in rw. If you can't see your device here probably is mounted as read only or autofs handle it only in read only mode. In case of mount it manually and try again"))
 		elif index == 1:
 			self["information"].setText(_("Lamedb used for epg.dat conversion.\nThis option doesn't work with crossepg patch v2"))
@@ -279,4 +292,19 @@
 		self.config.configured = 1
 		self.config.save()
+		try:
+			if self.config.db_root[-8:] == "crossepg":
+				config.misc.epgcache_filename.setValue(self.config.db_root[:-9] + "/epg.dat")
+			else:
+				config.misc.epgcache_filename.setValue(self.config.db_root + "/epg.dat")
+			config.misc.epgcache_filename.callNotifiersOnSaveAndCancel = True
+			config.misc.epgcache_filename.save()
+			configfile.save()
+		except Exception, e:
+			print "custom epgcache filename not supported by current enigma2 version"
+			
+		if getEPGPatchType() == -1:
+			# exec crossepg_prepare_pre_start for unpatched images
+			os.system(self.config.home_directory + "/crossepg_prepare_pre_start.sh")
+			
 		if self.show_extension != self.config.show_extension or self.show_plugin != self.config.show_plugin:
 			for plugin in plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU):
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_xepgdb_update.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_xepgdb_update.py	(revision 12090)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepg_xepgdb_update.py	(revision 12090)
@@ -0,0 +1,117 @@
+from enigma import getDesktop, eTimer
+
+from Components.Label import Label
+from Components.Pixmap import Pixmap
+from Components.ProgressBar import ProgressBar
+
+from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+
+from crossepglib import *
+from crossepg_locale import _
+
+import httplib
+import xml.etree.cElementTree
+import re
+import os
+
+SIFTEAM_HOST = "crossepg.sifteam.eu"
+
+class CrossEPG_Xepgdb_Source(object):
+	def __init__(self):
+		self.headers_url = ""
+		self.descriptors_url = ""
+		self.description = ""
+
+class CrossEPG_Xepgdb_Update(Screen):
+	def __init__(self, session):
+		if (getDesktop(0).size().width() < 800):
+			skin = "%s/skins/downloader_sd.xml" % os.path.dirname(sys.modules[__name__].__file__)
+			self.isHD = 0
+		else:
+			skin = "%s/skins/downloader_hd.xml" % os.path.dirname(sys.modules[__name__].__file__)
+			self.isHD = 1
+		f = open(skin, "r")
+		self.skin = f.read()
+		f.close()
+		Screen.__init__(self, session)
+		
+		self.sources = []
+		self.session = session
+		
+		self["background"] = Pixmap()
+		self["action"] = Label(_("Updating xepgdb providers..."))
+		self["status"] = Label("")
+		self["progress"] = ProgressBar()
+		self["progress"].hide()
+		
+		self.config = CrossEPG_Config()
+		self.config.load()
+		
+		self.timer = eTimer()
+		self.timer.callback.append(self.start)
+		
+		self.onFirstExecBegin.append(self.firstExec)
+		
+	def firstExec(self):
+		if self.isHD:
+			self["background"].instance.setPixmapFromFile("%s/images/background_hd.png" % (os.path.dirname(sys.modules[__name__].__file__)))
+		else:
+			self["background"].instance.setPixmapFromFile("%s/images/background.png" % (os.path.dirname(sys.modules[__name__].__file__)))
+		self.timer.start(100, 1)
+			
+	def start(self):
+		if self.load():
+			self.save(self.config.home_directory + "/providers/")
+			self.session.open(MessageBox, _("%d providers updated") % len(self.sources), type = MessageBox.TYPE_INFO, timeout = 5)	
+		else:
+			self.session.open(MessageBox, _("Cannot retrieve xepgdb sources"), type = MessageBox.TYPE_ERROR, timeout = 10)	
+		self.close()
+		
+	def load(self):
+		try:
+			conn = httplib.HTTPConnection(SIFTEAM_HOST)
+			conn.request("GET", "/sources.xml")
+			httpres = conn.getresponse()
+			if httpres.status == 200:
+				f = open ("/tmp/crossepg_xepgdb_tmp", "w")
+				f.write(httpres.read())
+				f.close()
+				self.loadFromFile("/tmp/crossepg_xepgdb_tmp")
+				os.unlink("/tmp/crossepg_xepgdb_tmp")
+				return True
+		except Exception, e:
+			print e
+		return False
+
+	def loadFromFile(self, filename):
+		mdom = xml.etree.cElementTree.parse(filename)
+		root = mdom.getroot()
+		
+		for node in root:
+			if node.tag == "source":
+				source = CrossEPG_Xepgdb_Source()
+				for childnode in node:
+					if childnode.tag == "description":
+						source.description = childnode.text
+					elif childnode.tag == "headers":
+						source.headers = childnode.text
+					elif childnode.tag == "descriptors":
+						source.descriptors = childnode.text
+		
+				self.sources.append(source)
+				
+	def save(self, destination):
+		os.system("rm -f " + destination + "/xepgdb_*.conf")
+		for source in self.sources:
+			p = re.compile('[/:()<>|?*\s-]|(\\\)')
+			filename = p.sub('_', source.description).lower()
+			if filename[:7] != "xepgdb_":
+				filename = "xepgdb_" + filename
+			f = open(destination + "/" + filename + ".conf", "w")
+			f.write("description=" + source.description + "\n")
+			f.write("protocol=xepgdb\n");
+			f.write("headers_url =" + source.headers + "\n")
+			f.write("descriptors_url =" + source.descriptors + "\n")
+			f.close()
+			
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepglib.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/crossepglib.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/crossepglib.py	(revision 12090)
@@ -61,4 +61,5 @@
 	show_plugin = 1
 	show_extension = 1
+	show_force_reload_as_plugin = 0
 	last_partial_download_timestamp = 0
 	last_full_download_timestamp = 0
@@ -127,4 +128,6 @@
 						elif key == "show_extension":
 							self.show_extension = int(value);
+						elif key == "show_force_reload_as_plugin":
+							self.show_force_reload_as_plugin = int(value);
 						elif key == "configured":
 							self.configured = int(value);
@@ -163,4 +166,5 @@
 		f.write("show_plugin=%d\n" % (self.show_plugin))
 		f.write("show_extension=%d\n" % (self.show_extension))
+		f.write("show_force_reload_as_plugin=%d\n" % (self.show_force_reload_as_plugin))
 		f.write("configured=%d\n" % (self.configured))
 		
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/plugin.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/plugin.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/plugin.py	(revision 12090)
@@ -10,4 +10,16 @@
 		return []
 
+def call_downloader(session, **kwargs):
+	crossepg_main.downloader(session)
+	
+def call_loaderAsPlugin(session, **kwargs):
+	crossepg_main.loaderAsPlugin(session)
+	
+def call_setup(session, **kwargs):
+	crossepg_main.setup(session)
+	
+def call_autostart(reason, session):
+	crossepg_main.autostart(reason, session)
+	
 def Plugins(**kwargs):
 	config = CrossEPG_Config()
@@ -18,15 +30,15 @@
 										description=_("An EPG downloader"),
 										where = [ PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_PLUGINMENU ],
-										fnc = crossepg_main.downloader))
+										fnc = call_downloader))
 	elif config.show_extension == 1:
 		plugins.append(PluginDescriptor(name="CrossEPG Downloader",
 										description=_("An EPG downloader"),
 										where = PluginDescriptor.WHERE_EXTENSIONSMENU,
-										fnc = crossepg_main.downloader))
+										fnc = call_downloader))
 	elif config.show_plugin == 1:
 		plugins.append(PluginDescriptor(name="CrossEPG Downloader",
 										description=_("An EPG downloader"),
 										where = PluginDescriptor.WHERE_PLUGINMENU,
-										fnc = crossepg_main.downloader))
+										fnc = call_downloader))
 	
 	if config.isQBOXHD():
@@ -34,5 +46,5 @@
 										description=_("CrossEPG setup panel"),
 										where = PluginDescriptor.WHERE_PLUGINMENU,
-										fnc = crossepg_main.setup))
+										fnc = call_setup))
 	else:
 		plugins.append(PluginDescriptor(name="CrossEPG",
@@ -44,4 +56,11 @@
 									description = _("CrossEPG automatic actions"),
 									where = PluginDescriptor.WHERE_SESSIONSTART,
-									fnc = crossepg_main.autostart))
+									fnc = call_autostart))
+									
+	if config.show_force_reload_as_plugin == 1:
+		plugins.append(PluginDescriptor(name="CrossEPG Force Reload",
+										description=_("CrossEPG Force Reload"),
+										where = PluginDescriptor.WHERE_PLUGINMENU,
+										fnc = call_loaderAsPlugin))
+									
 	return plugins;
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/skins/downloader_hd.xml
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/skins/downloader_hd.xml	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/skins/downloader_hd.xml	(revision 12090)
@@ -1,6 +1,6 @@
 <screen position="530,590" size="600,70" title="CrossEPG" flags="wfNoBorder">
 	<widget name="background" position="0,0" size="600,80" zPosition="-1" />
-	<widget name="action" halign="center" valign="center" position="65,10" size="520,20" font="Regular;16" />
-	<widget name="status" halign="center" valign="center" position="65,30" size="520,20" font="Regular;16" />
+	<widget name="action" halign="center" valign="center" position="65,10" size="520,20" font="Regular;16" transparent="1"/>
+	<widget name="status" halign="center" valign="center" position="65,30" size="520,20" font="Regular;16" transparent="1"/>
 	<widget name="progress" position="65,55" size="520,5" borderWidth="1" />
 </screen>
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/skins/downloader_sd.xml
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/skins/downloader_sd.xml	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/skins/downloader_sd.xml	(revision 12090)
@@ -1,6 +1,6 @@
 <screen position="330,450" size="350,70" title="CrossEPG" flags="wfNoBorder">
 	<widget name="background" position="0,0" size="350,80" zPosition="-1" />
-	<widget name="action" halign="center" valign="center" position="65,10" size="270,20" font="Regular;15" />
-	<widget name="status" halign="center" valign="center" position="65,30" size="270,20" font="Regular;15" />
+	<widget name="action" halign="center" valign="center" position="65,10" size="270,20" font="Regular;15" transparent="1"/>
+	<widget name="status" halign="center" valign="center" position="65,30" size="270,20" font="Regular;15" transparent="1"/>
 	<widget name="progress" position="65,55" size="270,5" borderWidth="1" />
 </screen>
Index: ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/version.py
===================================================================
--- ipk/source.sh4/swapepg_crossepg_0_61/var/swap/extensions/CrossEPG/version.py	(revision 11789)
+++ ipk/source.sh4/swapepg_crossepg/var/swap/extensions/CrossEPG/version.py	(revision 12090)
@@ -1,1 +1,1 @@
-version = "0.6.1 (svn 241)"
+version = "0.6.2)"
