diff --git a/src/daemon.vala b/src/daemon.vala
index 80cbe0c86066d43b297d3b79ffd48f2c01ec1dcb..e8c2492597496989c1045103b78cda595f7017ae 100644
--- a/src/daemon.vala
+++ b/src/daemon.vala
@@ -40,6 +40,39 @@ private int alpm_pkg_compare_name (Alpm.Package pkg_a, Alpm.Package pkg_b) {
 	return strcmp (pkg_a.name, pkg_b.name);
 }
 
+private string global_search_string;
+
+private int alpm_pkg_sort_search_by_relevance (Alpm.Package pkg_a, Alpm.Package pkg_b) {
+	if (global_search_string != null) {
+		// display exact match first
+		if (pkg_a.name == global_search_string) {
+			return 0;
+		}
+		if (pkg_b.name == global_search_string) {
+			return 1;
+		}
+		if (pkg_a.name.has_prefix (global_search_string + "-")) {
+			return 0;
+		}
+		if (pkg_b.name.has_prefix (global_search_string + "-")) {
+			return 1;
+		}
+		if (pkg_a.name.has_prefix (global_search_string)) {
+			return 0;
+		}
+		if (pkg_b.name.has_prefix (global_search_string)) {
+			return 1;
+		}
+		if (pkg_a.name.contains (global_search_string)) {
+			return 0;
+		}
+		if (pkg_b.name.contains (global_search_string)) {
+			return 1;
+		}
+	}
+	return strcmp (pkg_a.name, pkg_b.name);
+}
+
 namespace Pamac {
 	[DBus (name = "org.manjaro.pamac")]
 	public class Daemon: Object {
@@ -535,7 +568,9 @@ namespace Pamac {
 				syncdbs.next ();
 			}
 			result.join (syncpkgs.diff (result, (Alpm.List.CompareFunc) alpm_pkg_compare_name));
-			//result.sort ((Alpm.List.CompareFunc) alpm_pkg_compare_name);
+			// use custom sort function
+			global_search_string = search_string;
+			result.sort (result.length, (Alpm.List.CompareFunc) alpm_pkg_sort_search_by_relevance);
 			return result;
 		}
 
diff --git a/src/manager_window.vala b/src/manager_window.vala
index 0f02c5b5f1709a78fcca3689db3741ee55e5a7e3..fdf28949237276faf0e5ddd3530920e529bc352b 100644
--- a/src/manager_window.vala
+++ b/src/manager_window.vala
@@ -195,8 +195,6 @@ namespace Pamac {
 											typeof (string), //repo
 											typeof (uint64), //isize
 											typeof (string)); //GLib.format (isize)
-			// sort packages by name by default
-			packages_list.set_sort_column_id (1, Gtk.SortType.ASCENDING);
 			packages_treeview.set_model (packages_list);
 			// add custom cellrenderer to packages_treeview and aur_treewiew
 			var packages_state_renderer = new ActivableCellRendererPixbuf ();
@@ -1091,6 +1089,8 @@ namespace Pamac {
 						switch (packages_stack.visible_child_name) {
 							case "repos":
 								transaction.search_pkgs.begin (search_string, (obj, res) => {
+									// get custom sort by relevance
+									packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0);
 									populate_packages_list (transaction.search_pkgs.end (res));
 								});
 								break;
@@ -1309,6 +1309,8 @@ namespace Pamac {
 					case "repos":
 						transaction.search_pkgs.begin (search_string, (obj, res) => {
 							var pkgs = transaction.search_pkgs.end (res);
+							// get custom sort by relevance
+							packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0);
 							populate_packages_list (pkgs);
 							if (search_aur_button.get_active ()) {
 								if (pkgs.length == 0) {