diff --git a/po/pamac.pot b/po/pamac.pot
index e828b00a21fdfc8cbed98aea53ca069dab0a077b..169e6d7f829639aa609874492d4d058838c157f6 100644
--- a/po/pamac.pot
+++ b/po/pamac.pot
@@ -176,6 +176,10 @@ msgstr ""
 msgid "Transaction cancelled"
 msgstr ""
 
+#: ../src/transaction.vala
+msgid "Waiting for another package manager to quit"
+msgstr ""
+
 #: ../src/transaction.vala
 msgid "Checking dependencies"
 msgstr ""
diff --git a/src/daemon.vala b/src/daemon.vala
index 4f7871edb63e298cb494c51d0e2aa910a18943ed..439d48e5d868fa4ea85a275250d2b2359380f950 100644
--- a/src/daemon.vala
+++ b/src/daemon.vala
@@ -194,12 +194,33 @@ namespace Pamac {
 				if (!lockfile.query_exists ()) {
 					extern_lock = false;
 					refresh_handle ();
+					databases_lock_mutex.unlock ();
 				}
 			} else {
 				if (lockfile.query_exists ()) {
 					if (databases_lock_mutex.trylock ()) {
-						extern_lock = true;
-						databases_lock_mutex.unlock ();
+						// Functions trans_prepare, sysupgrade_prepare and refresh threads are blocked until unlock.
+						// An extern lock appears, check if pacman running.
+						int exit_status;
+						try {
+							Process.spawn_command_line_sync ("pidof pacman",
+														null,
+														null,
+														out exit_status);
+						} catch (SpawnError e) {
+							stderr.printf ("Error: %s\n", e.message);
+						}
+						if (exit_status == 0) {
+							extern_lock = true;
+						} else {
+							// Pacman is not running: remove the unneeded lock file.
+							try {
+								lockfile.delete ();
+							} catch (Error e) {
+								stderr.printf ("Error: %s\n", e.message);
+							}
+							databases_lock_mutex.unlock ();
+						}
 					}
 				}
 			}
@@ -313,14 +334,9 @@ namespace Pamac {
 						commands += "-u";
 					}
 					try {
-						var process = new Subprocess.newv (
+						new Subprocess.newv (
 							commands,
-							SubprocessFlags.STDOUT_PIPE | SubprocessFlags.STDERR_MERGE);
-						var dis = new DataInputStream (process.get_stdout_pipe ());
-						string? line;
-						while ((line = dis.read_line ()) != null) {
-							print ("%s\n",line);
-						}
+							SubprocessFlags.STDOUT_SILENCE | SubprocessFlags.STDERR_SILENCE);
 					} catch (Error e) {
 						stderr.printf ("Error: %s\n", e.message);
 					}
@@ -359,7 +375,11 @@ namespace Pamac {
 		}
 
 		private void refresh () {
-			databases_lock_mutex.lock ();
+			if (!databases_lock_mutex.trylock ()) {
+				// Wait for pacman to finish
+				emit_event (0, 0, {});
+				databases_lock_mutex.lock ();
+			}
 			write_log_file ("synchronizing package lists");
 			current_error = ErrorInfos ();
 			int force = (force_refresh) ? 1 : 0;
@@ -1292,7 +1312,11 @@ namespace Pamac {
 		}
 
 		private bool trans_init (Alpm.TransFlag flags) {
-			databases_lock_mutex.lock ();
+			if (!databases_lock_mutex.trylock ()) {
+				// Wait for pacman to finish
+				emit_event (0, 0, {});
+				databases_lock_mutex.lock ();
+			}
 			current_error = ErrorInfos ();
 			cancellable.reset ();
 			if (alpm_handle.trans_init (flags) == -1) {
diff --git a/src/transaction.vala b/src/transaction.vala
index 26115507ef4b07f82eeab4ceb682c6b784592be9..671a311fe7ed052303797a8ec0dbc4efe22f5717 100644
--- a/src/transaction.vala
+++ b/src/transaction.vala
@@ -722,6 +722,7 @@ namespace Pamac {
 						sysupgrade_simple (enable_downgrade);
 					} else {
 						finish_transaction ();
+						stop_progressbar_pulse ();
 					}
 				}
 			}
@@ -988,6 +989,10 @@ namespace Pamac {
 			string? action = null;
 			string? detailed_action = null;
 			switch (primary_event) {
+				case 0: //special case: wait for database lock
+					action = dgettext (null, "Waiting for another package manager to quit") + "...";
+					start_progressbar_pulse ();
+					break;
 				case 1: //Alpm.Event.Type.CHECKDEPS_START
 					action = dgettext (null, "Checking dependencies") + "...";
 					break;
@@ -1375,6 +1380,7 @@ namespace Pamac {
 		}
 
 		void on_refresh_finished (bool success) {
+			stop_progressbar_pulse ();
 			this.success = success;
 			clear_lists ();
 			if (success) {
@@ -1389,6 +1395,7 @@ namespace Pamac {
 		}
 
 		void on_trans_prepare_finished (bool success) {
+			stop_progressbar_pulse ();
 			this.success = success;
 			if (success) {
 				show_warnings ();
diff --git a/src/updater_window.vala b/src/updater_window.vala
index d6287b4e580d099966b5a7a5764790524f4f4b05..6a06fdc2c2d2e364b445789d715fdefe742a7cf5 100644
--- a/src/updater_window.vala
+++ b/src/updater_window.vala
@@ -98,7 +98,10 @@ namespace Pamac {
 			stack.add_named (transaction.term_grid, "term");
 			transaction_infobox.pack_start (transaction.progress_box);
 
-			on_refresh_button_clicked ();
+			Timeout.add (500, () => {
+				on_refresh_button_clicked ();
+				return false;
+			});
 
 			stack.notify["visible-child"].connect (on_stack_visible_child_changed);