diff --git a/src/alpm_utils.vala b/src/alpm_utils.vala
index b5a92a2c59a9e8552632d7d8c957cc7407a2653e..c681706a49c62695b0d38078851da3db45b6a846 100644
--- a/src/alpm_utils.vala
+++ b/src/alpm_utils.vala
@@ -192,6 +192,21 @@ namespace Pamac {
 			}
 		}
 
+		internal void clean_cache (keep_nb, only_uninstalled) {
+			var database = new Pamac.Database (config);
+			HashTable<string, int64?> details = database.get_clean_cache_details (keep_nb, only_uninstalled);
+			var iter = HashTableIter<string, int64?> (details);
+			unowned string name;
+			while (iter.next (out name, null)) {
+				var file = GLib.File.new_for_path (name);
+				try {
+					file.delete ();
+				} catch (GLib.Error e) {
+					stderr.printf("%s\n", e.message);
+				}
+			}
+		}
+
 		unowned Alpm.Package? get_syncpkg (string name) {
 			unowned Alpm.Package? pkg = null;
 			unowned Alpm.List<unowned Alpm.DB> syncdbs = alpm_handle.syncdbs;
diff --git a/src/system_daemon.vala b/src/system_daemon.vala
index b322d6c172afcde56026030a161b975a456b5d63..d5dfe1bffbcdfc6ce2c71dff86bc85e402c80e64 100644
--- a/src/system_daemon.vala
+++ b/src/system_daemon.vala
@@ -356,18 +356,7 @@ namespace Pamac {
 			check_authorization.begin (sender, (obj, res) => {
 				bool authorized = check_authorization.end (res);
 				if (authorized) {
-					string[] commands = {"paccache", "--nocolor", "-rq"};
-					commands += "-k%llu".printf (keep_nb);
-					if (only_uninstalled) {
-						commands += "-u";
-					}
-					try {
-						new Subprocess.newv (
-							commands,
-							SubprocessFlags.STDOUT_SILENCE | SubprocessFlags.STDERR_SILENCE);
-					} catch (Error e) {
-						stderr.printf ("Error: %s\n", e.message);
-					}
+					alpm_utils.clean_cache (keep_nb, only_uninstalled);
 				}
 			});
 		}
diff --git a/src/transaction_interface_root.vala b/src/transaction_interface_root.vala
index 2dbb5ac6fd9d00182ddb86d89552fed98bdf24bd..b5174e04179b0793e4245d75391b12f9be44f2e4 100644
--- a/src/transaction_interface_root.vala
+++ b/src/transaction_interface_root.vala
@@ -134,18 +134,7 @@ namespace Pamac {
 		}
 
 		public void clean_cache (uint64 keep_nb, bool only_uninstalled) {
-			string[] commands = {"paccache", "--nocolor", "-rq"};
-			commands += "-k%llu".printf (keep_nb);
-			if (only_uninstalled) {
-				commands += "-u";
-			}
-			try {
-				new Subprocess.newv (
-					commands,
-					SubprocessFlags.STDOUT_SILENCE | SubprocessFlags.STDERR_SILENCE);
-			} catch (Error e) {
-				stderr.printf ("Error: %s\n", e.message);
-			}
+			alpm_utils.clean_cache (keep_nb, only_uninstalled);
 		}
 
 		async void set_pkgreason (string pkgname, uint reason) {