diff --git a/pamac-check-updates b/pamac-check-updates
index 29d604cb347210b169c1d6f4bc1d1194d2a60078..eadb429866cb0dc56eee55ccc9564264292dc41a 100755
--- a/pamac-check-updates
+++ b/pamac-check-updates
@@ -1,10 +1,13 @@
 #! /usr/bin/python
 # -*-coding:utf-8-*-
 
-from pamac import transaction
+from pamac import common, transaction
 
-print('check_updates')
-transaction.get_handle()
-transaction.Refresh()
-transaction.CheckUpdates()
-transaction.StopDaemon()
+if not common.pid_file_exists():
+	print('checking updates')
+	common.write_pid_file()
+	transaction.Refresh()
+	transaction.TransactionDone()
+	transaction.StopDaemon()
+	common.rm_pid_file()
+	print('check updates done')
diff --git a/pamac-tray b/pamac-tray
index 47b092818bc4f1179c24608a066f40356a81829b..9c64eaf3dc869fe53f95aede8d798dab6c82d1df 100755
--- a/pamac-tray
+++ b/pamac-tray
@@ -1,12 +1,13 @@
 #! /usr/bin/python
 # -*-coding:utf-8-*-
 
-from gi.repository import Gtk
-from subprocess import Popen
+from gi.repository import Gtk, GObject
+from subprocess import call
 from pamac import transaction
 import dbus
 import threading
 
+GObject.threads_init()
 bus = dbus.SystemBus()
 
 class Tray:
@@ -28,10 +29,10 @@ class Tray:
 		self.statusIcon.connect('popup-menu', self.popup_menu_cb, self.menu)
 
 	def execute_update(self, widget, event, data = None):
-		Popen(['/usr/bin/pamac-updater'])
+		call(['/usr/bin/pamac-updater'])
 
 	def execute_manager(self, widget, event, data = None):
-		Popen(['/usr/bin/pamac-manager'])
+		call(['/usr/bin/pamac-manager'])
 
 	def quit_tray(self, widget, data = None):
 		t.shutdown()
@@ -52,7 +53,7 @@ class PeriodicTask(threading.Thread):
 	def __init__(self):
 		threading.Thread.__init__(self)
 		self._finished = threading.Event()
-		self._interval = 60
+		self._interval = 30
 
 	def setInterval(self, interval):
 		"""Set the number of seconds we sleep between executing our task"""
@@ -71,10 +72,11 @@ class PeriodicTask(threading.Thread):
 			self._finished.wait(self._interval)
 
 	def task(self):
-		Popen(['/usr/bin/pamac-check-updates'])
+		call(['/usr/bin/pamac-check-updates'])
 
 def set_icon(*arg):
 	print('set-icon')
+	transaction.get_handle()
 	do_syncfirst, updates = transaction.get_updates()
 	if updates:
 		icon = '/usr/share/pamac/icons/24x24/status/update-normal.png'
@@ -82,32 +84,13 @@ def set_icon(*arg):
 	else:
 		icon = '/usr/share/pamac/icons/24x24/status/update-enhancement.png'
 		info = ' No update available'
+	print(info)
 	tray.update_icon(icon, info)
 
-def handle_error(error):
-	global tray
-	print('error',error)
-	icon = '/usr/share/pamac/icons/24x24/status/update-enhancement.png'
-	info = ' No update available'
-	tray = Tray()
-	tray.update_icon(icon, info)
-	transaction.StopDaemon()
-
-def handle_reply(reply):
-	global tray
-	tray = Tray()
-	set_icon()
-	transaction.StopDaemon()
-
-def do_refresh():
-	"""Sync databases like pacman -Sy"""
-	transaction.get_handle()
-	transaction.Refresh(reply_handler = handle_reply, error_handler = handle_error, timeout = 2000*1000)
-
-bus.add_signal_receiver(set_icon, dbus_interface = "org.manjaro.pamac", signal_name = "EmitAvailableUpdates")
+bus.add_signal_receiver(set_icon, dbus_interface = "org.manjaro.pamac", signal_name = "EmitTransactionDone")
 
-tray = None
-do_refresh()
+tray = Tray()
+#set_icon()
 t = PeriodicTask()
 t.start()
-#Gtk.main()
+Gtk.main()
diff --git a/pamac/main.py b/pamac/main.py
index 945171ca26762fec8248e1d3a7796fe3e73cebb9..f4dd15cda7e1404081549c3fa40090980a84563c 100644
--- a/pamac/main.py
+++ b/pamac/main.py
@@ -259,7 +259,7 @@ def handle_error(error):
 		transaction.to_remove = []
 		transaction_dict.clear()
 		transaction_type = None
-		transaction.get_handle()
+		transaction.update_db()
 		set_packages_list()
 	if mode == 'updater':
 		have_updates()
@@ -276,10 +276,11 @@ def handle_reply(reply):
 	transaction.t_lock = False
 	transaction.Release()
 	transaction.ProgressWindow.hide()
+	transaction.TransactionDone()
 	transaction.to_add = []
 	transaction.to_remove = []
 	transaction_dict.clear()
-	transaction.get_handle()
+	transaction.update_db()
 	if (transaction_type == "install") or (transaction_type == "remove"):
 		transaction_type = None
 		set_packages_list()
@@ -384,7 +385,6 @@ def finalize():
 def check_conflicts(pkg_list):
 	depends = [pkg_list]
 	warning = ''
-	#transaction.get_handle()
 	pkgs = transaction.handle.get_localdb().search('linux3')
 	installed_linux = []
 	for i in pkgs:
@@ -479,16 +479,17 @@ def check_conflicts(pkg_list):
 		for replace in pkg.replaces:
 			provide = pyalpm.find_satisfier(transaction.localpkgs.values(), replace)
 			if provide:
-				if provide.name != pkg.name:
-					if not pkg.name in transaction.localpkgs.keys():
-						if common.format_pkg_name(replace) in transaction.localpkgs.keys():
-							if not provide.name in transaction.to_remove:
-								transaction.to_remove.append(provide.name)
-								if warning:
-									warning = warning+'\n'
-								warning = warning+provide.name+' will be replaced by '+pkg.name
-							if not pkg.name in transaction.to_add:
-								transaction.to_add.append(pkg.name)
+				if not common.format_pkg_name(replace) in transaction.syncpkgs.keys():
+					if provide.name != pkg.name:
+						if not pkg.name in transaction.localpkgs.keys():
+							if common.format_pkg_name(replace) in transaction.localpkgs.keys():
+								if not provide.name in transaction.to_remove:
+									transaction.to_remove.append(provide.name)
+									if warning:
+										warning = warning+'\n'
+									warning = warning+provide.name+' will be replaced by '+pkg.name
+								if not pkg.name in transaction.to_add:
+									transaction.to_add.append(pkg.name)
 	print(transaction.to_add,transaction.to_remove)
 	if warning:
 		transaction.WarningDialog.format_secondary_text(warning)
diff --git a/pamac/pamac-daemon.py b/pamac/pamac-daemon.py
index 1bc8b6e92afe17d938bb2c78cf43d37467940b6d..364eccad7c8df45cf2c3e2f1dd14f1a2c8bedb61 100644
--- a/pamac/pamac-daemon.py
+++ b/pamac/pamac-daemon.py
@@ -176,16 +176,13 @@ class PamacDBusService(dbus.service.Object):
 		return error
 
 	@dbus.service.signal('org.manjaro.pamac')
-	def EmitAvailableUpdates(self, available_updates):
+	def EmitTransactionDone(self, done):
 		pass
 
 	@dbus.service.method('org.manjaro.pamac', '', '')
-	def CheckUpdates(self):
-		for pkg in config.handle.get_localdb().pkgcache:
-			candidate = pyalpm.sync_newversion(pkg, config.handle.get_syncdbs())
-			if candidate:
-				self.EmitAvailableUpdates(True)
-				return
+	def TransactionDone(self):
+		self.EmitTransactionDone(True)
+		return
 
 	@dbus.service.method('org.manjaro.pamac', 'a{sb}', 's', sender_keyword='sender', connection_keyword='connexion')
 	def Init(self, options, sender=None, connexion=None):
diff --git a/pamac/transaction.py b/pamac/transaction.py
index 0f7e70be769fc5ccd0d22dd012df8fe4d591dcc7..987dfc31bfa3fd1abf999c8ccb1be4327e1d9530 100644
--- a/pamac/transaction.py
+++ b/pamac/transaction.py
@@ -33,11 +33,15 @@ ProgressCancelButton = interface.get_object('ProgressCancelButton')
 
 def get_handle():
 	global handle
+	handle = config.pacman_conf.initialize_alpm()
+	print('get handle')
+
+def update_db():
+	get_handle()
 	global syncpkgs
 	global localpkgs
 	syncpkgs = OrderedDict()
 	localpkgs = OrderedDict()
-	handle = config.pacman_conf.initialize_alpm()
 	for repo in handle.get_syncdbs():
 		for pkg in repo.pkgcache:
 			if not pkg.name in syncpkgs.keys():
@@ -45,13 +49,11 @@ def get_handle():
 	for pkg in handle.get_localdb().pkgcache:
 		if not pkg.name in localpkgs.keys():
 			localpkgs[pkg.name] = pkg
-	print('get handle')
 
 DBusGMainLoop(set_as_default=True)
 bus = dbus.SystemBus()
 proxy = bus.get_object('org.manjaro.pamac','/org/manjaro/pamac', introspect=False)
 Refresh = proxy.get_dbus_method('Refresh','org.manjaro.pamac')
-CheckUpdates = proxy.get_dbus_method('CheckUpdates','org.manjaro.pamac')
 Init = proxy.get_dbus_method('Init','org.manjaro.pamac')
 Sysupgrade = proxy.get_dbus_method('Sysupgrade','org.manjaro.pamac')
 Remove = proxy.get_dbus_method('Remove','org.manjaro.pamac')
@@ -61,6 +63,7 @@ To_Remove = proxy.get_dbus_method('To_Remove','org.manjaro.pamac')
 To_Add = proxy.get_dbus_method('To_Add','org.manjaro.pamac')
 Commit = proxy.get_dbus_method('Commit','org.manjaro.pamac')
 Release = proxy.get_dbus_method('Release','org.manjaro.pamac')
+TransactionDone = proxy.get_dbus_method('TransactionDone','org.manjaro.pamac')
 StopDaemon = proxy.get_dbus_method('StopDaemon','org.manjaro.pamac')
 
 def action_signal_handler(action):
@@ -115,12 +118,11 @@ def get_updates():
 	"""Return a list of package objects in local db which can be updated"""
 	do_syncfirst = False
 	list_first = []
-	#get_handle()
+	#update_db()
 	if config.syncfirst:
 		for name in config.syncfirst:
-			pkg = handle.get_localdb().get_pkg(name)
-			if pkg:
-				candidate = pyalpm.sync_newversion(pkg, handle.get_syncdbs())
+			if name in localpkgs.keys():
+				candidate = pyalpm.sync_newversion(localpkgs[name], handle.get_syncdbs())
 				if candidate:
 					for repo in handle.get_syncdbs():
 						pkg = repo.get_pkg(candidate.name)