diff -rN -u old-misc/rhythmdb/rhythmdb.c new-misc/rhythmdb/rhythmdb.c
--- old-misc/rhythmdb/rhythmdb.c	2006-07-25 20:57:18.000000000 +1000
+++ new-misc/rhythmdb/rhythmdb.c	2006-07-25 20:57:18.000000000 +1000
@@ -3329,6 +3334,7 @@
 			ENUM_ENTRY (RHYTHMDB_PROP_FIRST_SEEN_STR, "Time Added to Library (gchararray) [first-seen-str]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_LAST_SEEN_STR, "Last time the song was available (gchararray) [last-seen-str]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_SEARCH_MATCH, "Search matching key (gchararray) [search-match]"),
+			ENUM_ENTRY (RHYTHMDB_PROP_EXACT_SEARCH_MATCH, "Search exact matching key (gchararray) [exact-search-match]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_YEAR, "Year of date (gulong) [year]"),
 
 			ENUM_ENTRY (RHYTHMDB_PROP_STATUS, "Status of file (gulong) [status]"),
@@ -3905,8 +3911,11 @@
 		return rb_refstring_get (entry->first_seen_str);
 	case RHYTHMDB_PROP_LAST_SEEN_STR:
 		return rb_refstring_get (entry->last_seen_str);
+		/* synthetic properties for query matching */
 	case RHYTHMDB_PROP_SEARCH_MATCH:
-		return NULL;	/* synthetic property */
+		return NULL;
+	case RHYTHMDB_PROP_EXACT_SEARCH_MATCH:
+		return NULL;
 	/* Podcast properties */
 	case RHYTHMDB_PROP_DESCRIPTION:
 		if (podcast)
diff -rN -u old-misc/rhythmdb/rhythmdb.h new-misc/rhythmdb/rhythmdb.h
--- old-misc/rhythmdb/rhythmdb.h	2006-07-25 20:57:18.000000000 +1000
+++ new-misc/rhythmdb/rhythmdb.h	2006-07-25 20:57:18.000000000 +1000
@@ -172,6 +173,7 @@
 
 	/* synthetic properties */
 	RHYTHMDB_PROP_SEARCH_MATCH,
+	RHYTHMDB_PROP_EXACT_SEARCH_MATCH,
 	RHYTHMDB_PROP_YEAR,
 
 	/* Podcast properties */
diff -rN -u old-misc/rhythmdb/rhythmdb-tree.c new-misc/rhythmdb/rhythmdb-tree.c
--- old-misc/rhythmdb/rhythmdb-tree.c	2006-07-25 20:57:18.000000000 +1000
+++ new-misc/rhythmdb/rhythmdb-tree.c	2006-07-25 20:57:18.000000000 +1000
@@ -909,6 +911,7 @@
 		case RHYTHMDB_PROP_FIRST_SEEN_STR:
 		case RHYTHMDB_PROP_LAST_SEEN_STR:
 		case RHYTHMDB_PROP_SEARCH_MATCH:
+		case RHYTHMDB_PROP_EXACT_SEARCH_MATCH:
 		case RHYTHMDB_PROP_YEAR:
 		case RHYTHMDB_NUM_PROPERTIES:
 			break;
@@ -1554,6 +1557,25 @@
 }
 
 static gboolean
+exact_search_match_properties (RhythmDB *db, RhythmDBEntry *entry, const gchar *text)
+{
+	const RhythmDBPropType props[] = {
+		RHYTHMDB_PROP_TITLE,
+		RHYTHMDB_PROP_ALBUM,
+		RHYTHMDB_PROP_ARTIST,
+		RHYTHMDB_PROP_GENRE
+	};
+	int i;
+	
+	for (i = 0; i < G_N_ELEMENTS (props); i++) {
+		const char *entry_string = rhythmdb_entry_get_string (entry, props[i]);
+		if (entry_string && (strstr (entry_string, text) != NULL))
+			return TRUE;
+	}
+	return FALSE;
+}
+
+static gboolean
 evaluate_conjunctive_subquery (RhythmDBTree *dbtree,
 			       GPtrArray *query,
 			       guint base,
@@ -1641,7 +1663,9 @@
 				if (data->propid == RHYTHMDB_PROP_SEARCH_MATCH) {
 					/* this is a special property, that should match several things */
 					islike = search_match_properties (db, entry, g_value_get_boxed (data->val));
-
+				} else if (data->propid == RHYTHMDB_PROP_EXACT_SEARCH_MATCH) {
+					/* similar to RHYTHMDB_PROP_SEARCH_MATCH */
+					islike = exact_search_match_properties (db, entry, g_value_get_string (data->val));
 				} else {
 					const gchar *value_string = g_value_get_string (data->val);
 					const char *entry_string = rhythmdb_entry_get_string (entry, data->propid);

