def getInstance(self, origin="N/A", session=None):
		printl("getInstance called from: "+ origin, self, "S")
		global gDatabase
		global gDatabaseMutex
		# Lock to init one only (Backgroud Loader is in concurrence with Screen call)		
		if gDatabase is None:
			printl("Acquiring Mutex for: "+ origin, self, "I")
			gDatabaseMutex.acquire()
			#try:
			if True:
				printl("Mutex Acquired for: "+ origin, self, "I")
				#if session is not None: self.session = session
				
				if self.dbHandler is None:		
					printl("Creating new Database instance", self)				
					if self.USE_DB_TYPE == self.DB_SQLITE:			
						self.dbHandler = databaseHandlerSQL().getInstance("from Database-" + origin )
						if self.dbHandler.DB_FIRSTTIME:
							printl("Sql FirstTime", self)					 
							self.importDataToSql(session)#.addCallback(self.ImportDone).addErrback(self.ImportError)
			
							self.dbHandler.DB_FIRSTTIME = False
						else:
							printl("NOT Sql FirstTime", self)					 

					if self.USE_DB_TYPE == self.DB_PICKLEV2:		
						self.dbHandler = databaseHandlerPICKLEV2().getInstance("from Database-" + origin, session)	
						if self.dbHandler.DB_FIRSTTIME:
							printl("Pickle V2 FirstTime", self)					 
							self.importDataToPickleV2(session)
			
							self.dbHandler.DB_FIRSTTIME = False
						else:
							printl("NOT Pickle V2 FirstTime", self)					 
								
					if self.USE_DB_TYPE == self.DB_PICKLE:			
						self.dbHandler = databaseHandlerPICKLE().getInstance("from Database-" + origin, session)	
				
					if self.PRELOADDB:
						self.dbHandler.loadAll()# RELOAD ALLL 
						
				gDatabase = self
			#finally:	
				gDatabaseMutex.release()
				printl("Released Mutex of: "+ origin, self, "I")
		
		return gDatabase
	def importDataToPickleV2 (self, session):
		printl("->", self, "S")
		try:
			if session is not None:
				self.mm = session.open(MessageBox, (_("\nConverting data to V2.... \n\nPlease wait... ")), MessageBox.TYPE_INFO)
				#self.mm = self.session.open(Msg)		
			printl("Importing Data to PickleV2", self)
			# this will Open Pickle V1 and run upgrades if necessary
			userId = config.plugins.pvmc.seenuserid.value
			dbHandlerPickle = databaseHandlerPICKLE().getInstance("from importDataToPickleV2", None)
			dbHandlerPickle.loadAll()
			#Upgrade SeenDB
			records = dbHandlerPickle.getSeenForUpgrade()
			
			self.dbHandler.loadAll()
			
			start_time = time.time()			
			cntNew = 0
			
			printl("Total Seen Movies to Convert: "+str(len(records["Movies"])), self)
			for imdb in records["Movies"]:
				if imdb == u"":
					continue
				printl("getSeen for imdb: "+imdb, self)
				m = self.dbHandler.getMediaWithImdbId(imdb)
				if m is None:
					#printl("IS NONE: "+imdb, self)
					m = MediaInfo()
					m.Id = None
					m.ImdbId = imdb
					
				seen = records["Movies"][imdb]["Seen"]
				if seen:
					self.dbHandler.MarkAsSeenWithMedia(m,userId)
				else:
					pass
					#self.dbHandler.MarkAsUnseenWithMedia(m,userId)
				
				cntNew += 1
			
			printl("Total Seen Series(no episodes) to Convert: "+str(len(records["TV"])), self)
			for thetvdb in records["TV"]:
				if thetvdb == u"":
					continue
				printl("getSeen for thetvdb: "+thetvdb, self)
				serie = self.dbHandler.getMediaWithTheTvDbId(thetvdb)
				for season in records["TV"][thetvdb]:			
					if serie is not None:
						EpisodesFromSeason = self.dbHandler.getEpisodes(serie.Id, season)	
					for episode in records["TV"][thetvdb][season]:
						EpisodeInserted = False
						seen = records["TV"][thetvdb][season][episode]["Seen"]
						if serie is not None:
							for ep in EpisodesFromSeason:
								if episode == ep.Episode:
									EpisodeInserted = True
									if seen:
										self.dbHandler.MarkAsSeen(ep.Id,userId)
									else:	
										pass
										#self.dbHandler.MarkAsUnseen(ep.Id,userId)
						else:
							#printl("NO SERIE: " + thetvdb, self)
							pass
							
						if not EpisodeInserted:
							#printl("MANNUALLY: " + thetvdb, self)
							m = MediaInfo() # Fake Media, Avoid loosing Seen Data
							m.Id = None
							m.TheTvDbId = thetvdb
							m.Season = season
							m.Episode = episode
							if seen:
								#printl("SEEN 2: " + thetvdb, self)
								self.dbHandler.MarkAsSeenWithMedia(m,userId)
							else:
								#printl("UNSEEN 2: " + thetvdb, self)
								#self.dbHandler.MarkAsUnseenWithMedia(m,userId)
								pass
								
						cntNew += 1
								
									
# dbSeen["Movies"][primary_key["ImdbId"]]["Seen"] = primary_key["Seen"]
# dbSeen["TV"][primary_key["TheTvDbId"]][primary_key["Season"]][primary_key["Episode"]]["Seen"] = primary_key["Seen"]

			printl("Seen Count: "+str(str(len(records["Movies"])+len(records["TV"]))) + " Processed: " + str(cntNew) )				
			
			#self.dbHandler.commit()
			elapsed_time = time.time() - start_time
			printl("Took: " + str(elapsed_time), self)
			try:
				if os.path.exists(self.DB_PATH + "seen.db"):
					os.rename(self.DB_PATH + "seen.db",   self.DB_PATH + "seen.db" +".old")
			except Exception, ex:
				printl(".Backup Seen failed! Ex: " + str(ex), __name__, "E")
		except Exception, ex:
			printl(".Failed Import to PickleV2! Reloading Pickle V1. Ex: " + str(ex), __name__, "E")
			self.USE_DB_TYPE    	= self.DB_PICKLE