def start(self):
		if DB_TYPE == 'sqlite':
			self.DB = MyDatabaseAPI(DB_FILE, connect=False, quiet=True, check_version=False)
		else:
			self.DB = DB
		ADDON.log("Service starting...", 1)
		monitor = xbmc.Monitor()
		self.clear_cache()
		ADDON.log("Waiting to Transmogrify...",1)
		if ADDON.get_setting('network_bind') == 'Localhost':
			address = "127.0.0.1"
		else:
			address = "0.0.0.0"
		ADDON.log("Launching WebInterface on: %s:%s" % (address, CONTROL_PORT))
		
		server_class = ThreadedHTTPServer
		httpd = server_class((address, CONTROL_PORT), RequestHandler)
		webserver = Thread(target=httpd.serve_forever)
		webserver.start()
		self.DB.connect()
		while not monitor.abortRequested():
			if monitor.waitForAbort(1) or get_property('service.abort'):
				break
			filename, url, raw_url, id, file_id, video_type, save_dir = self.poll_queue()
			if id:
				ADDON.log("Starting to Transmogrify: %s" % filename,1)
				self.id=id
				started = time.time()
				set_property("caching.file_id", file_id)
				TM = Transmogrifier(id, url, raw_url, filename, file_id, video_type=video_type, save_dir=save_dir)
				TM.start()
				
				if get_property("abort_all")=="true":
					self.DB.execute("UPDATE queue SET status=-1 WHERE id=?", [self.id])
				else:
					set_property("caching.complete", file_id)
					self.DB.execute("UPDATE queue SET status=3 WHERE id=?", [self.id])
					try:
						if NOTIFICATION:
							from subprocess import call
							wav = vfs.join(ROOT_PATH, 'resources/notifications/'+NOTIFICATION+'.wav')
							if PLATFORM.startswith('linux'):
								call(["aplay", wav])
							elif PLATFORM.startswith('darwin'):
								call(["afplay"], wav)
							elif PLATFORM.startswith('win'):
								import winsound
								winsound.PlaySound(wav, winsound.SND_FILENAME)
					except: pass
				self.DB.commit()
				del TM
		
		httpd.socket.close()
		ADDON.log("Service stopping...", 1)