Index: ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_about.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_about.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_loader.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_loader.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_main.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_main.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_menu.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_menu.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_providers.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_providers.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_rytec_update.py
===================================================================
--- ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_rytec_update.py	(revision 12090)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_setup.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_setup.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_xepgdb_update.py
===================================================================
--- ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepg_xepgdb_update.py	(revision 12090)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepglib.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/crossepglib.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/plugin.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/plugin.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/skins/downloader_hd.xml
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/skins/downloader_hd.xml	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/skins/downloader_sd.xml
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/skins/downloader_sd.xml	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/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/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/version.py
===================================================================
--- ipk/source/epg_crossepg_0_61/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/version.py	(revision 8578)
+++ ipk/source/epg_crossepg/usr/lib/enigma2/python/Plugins/SystemPlugins/CrossEPG/version.py	(revision 12090)
@@ -1,1 +1,1 @@
-version = "0.6.1 (svn 241)"
+version = "0.6.2)"
