diff --git a/ChangeLog b/ChangeLog
index 5e43b7ad8..1d71bb317 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,7 @@ ver 0.13.0 (2007/??/??)
 * New tagtypes command for retrieving a list of available tag types
 * Fix a bug where no ACK was returned if loading a playlist failed
 * Fix a bug where db_update in stats would be 0 after initial database creation
+* New count command for getting stats on found songs (similar to "find")
 * Lots of bug fixes, cleaned up code, and performance improvements
 
 ver 0.12.2 (2007/3/20)
diff --git a/src/command.c b/src/command.c
index e62919e90..519f6ff19 100644
--- a/src/command.c
+++ b/src/command.c
@@ -96,6 +96,7 @@
 #define COMMAND_PLAYLISTFIND	"playlistfind"
 #define COMMAND_PLAYLISTSEARCH	"playlistsearch"
 #define COMMAND_TAGTYPES	"tagtypes"
+#define COMMAND_COUNT		"count"
 
 #define COMMAND_STATUS_VOLUME           "volume"
 #define COMMAND_STATUS_STATE            "state"
@@ -518,6 +519,27 @@ static int handleSearch(int fd, int *permission, int argc, char *argv[])
 	return ret;
 }
 
+static int handleCount(int fd, int *permission, int argc, char *argv[])
+{
+	int ret;
+
+	LocateTagItem *items;
+	int numItems = newLocateTagItemArrayFromArgArray(argv + 1,
+							 argc - 1,
+							 &items);
+
+	if (numItems <= 0) {
+		commandError(fd, ACK_ERROR_ARG, "incorrect arguments");
+		return -1;
+	}
+
+	ret = searchStatsForSongsIn(fd, NULL, numItems, items);
+
+	freeLocateTagItemArray(numItems, items);
+
+	return ret;
+}
+
 static int handlePlaylistFind(int fd, int *permission, int argc, char *argv[])
 {
 	LocateTagItem *items;
@@ -1051,6 +1073,7 @@ void initCommands(void)
 	addCommand(COMMAND_PLAYLISTFIND,     PERMISSION_READ,    2,   -1,  handlePlaylistFind,         NULL);
 	addCommand(COMMAND_PLAYLISTSEARCH,   PERMISSION_READ,    2,   -1,  handlePlaylistSearch,       NULL);
 	addCommand(COMMAND_TAGTYPES,         PERMISSION_READ,    0,   0,   handleTagTypes,             NULL);
+	addCommand(COMMAND_COUNT,            PERMISSION_READ,    2,   -1,  handleCount,                NULL);
 
 	sortList(commandList);
 }
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 370a38dd6..756431650 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -38,6 +38,12 @@ typedef struct _LocateTagItemArray {
 	LocateTagItem *items;
 } LocateTagItemArray;
 
+typedef struct _SearchStats {
+	LocateTagItemArray locateArray;
+	int numberOfSongs;
+	int playTime;
+} SearchStats;
+
 static int countSongsInDirectory(int fd, Directory * directory, void *data)
 {
 	int *count = (int *)data;
@@ -120,6 +126,44 @@ int findSongsIn(int fd, char *name, int numItems, LocateTagItem * items)
 	return traverseAllIn(fd, name, findInDirectory, NULL, (void *)&array);
 }
 
+static void printSearchStats(int fd, SearchStats *stats)
+{
+	fdprintf(fd, "songs: %i\n", stats->numberOfSongs);
+	fdprintf(fd, "playtime: %i\n", stats->playTime);
+}
+
+static int searchStatsInDirectory(int fd, Song * song, void *data)
+{
+	SearchStats *stats = data;
+
+	if (tagItemsFoundAndMatches(song, stats->locateArray.numItems,
+	                                  stats->locateArray.items)) {
+		stats->numberOfSongs++;
+		if (song->tag->time > 0)
+			stats->playTime += song->tag->time;
+	}
+
+	return 0;
+}
+
+int searchStatsForSongsIn(int fd, char *name, int numItems,
+                          LocateTagItem * items)
+{
+	SearchStats stats;
+	int ret;
+
+	stats.locateArray.numItems = numItems;
+	stats.locateArray.items = items;
+	stats.numberOfSongs = 0;
+	stats.playTime = 0;
+
+	ret = traverseAllIn(fd, name, searchStatsInDirectory, NULL, &stats);
+	if (ret == 0)
+		printSearchStats(fd, &stats);
+
+	return ret;
+}
+
 int printAllIn(int fd, char *name)
 {
 	return traverseAllIn(fd, name, printSongInDirectory,
diff --git a/src/dbUtils.h b/src/dbUtils.h
index 722ff15b0..0607bc3b5 100644
--- a/src/dbUtils.h
+++ b/src/dbUtils.h
@@ -32,10 +32,13 @@ int addAllInToStoredPlaylist(int fd, char *name, char *utf8file);
 int printInfoForAllIn(int fd, char *name);
 
 int searchForSongsIn(int fd, char *name, int numItems,
-		     LocateTagItem * items);
+                     LocateTagItem * items);
 
 int findSongsIn(int fd, char *name, int numItems, LocateTagItem * items);
 
+int searchStatsForSongsIn(int fd, char *name, int numItems,
+                          LocateTagItem * items);
+
 int countSongsIn(int fd, char *name);
 
 unsigned long sumSongTimesIn(int fd, char *name);