diff --git a/var/mongoose/cgi-bin/browse.jim b/var/mongoose/cgi-bin/browse.jim
index 3a24539..352da19 100755
--- a/var/mongoose/cgi-bin/browse.jim
+++ b/var/mongoose/cgi-bin/browse.jim
@@ -17,10 +17,11 @@ cgi_input
 #set _cgi(dir) "/media/My Video/Chuggington"
 
 proc directory {file bfile} {
+	regsub -all " +" $bfile "" tbfile
 	puts "<div class=va>"
 	puts "<a href=$::env(REQUEST_URI)?dir=[cgi_quote_url $file]>"
-	puts "<img border=0 class=va src=/images/711_1_09_Media_Folder.png>"
-	regsub -all " +" $bfile "" tbfile
+	puts "<img border=0 class=va id=\"img$tbfile\"
+	    src=/images/711_1_09_Media_Folder.png>"
 	puts "$bfile</a><span class=filesize id=\"$tbfile\">
 		</span></div>"
 }
diff --git a/var/mongoose/cgi-bin/browse/browse.js b/var/mongoose/cgi-bin/browse/browse.js
index 5f04ac7..55e053f 100755
--- a/var/mongoose/cgi-bin/browse/browse.js
+++ b/var/mongoose/cgi-bin/browse/browse.js
@@ -35,6 +35,21 @@ function folder_size_callback(data, status, xhr)
 	$.each(data, insert_folder_size);
 }
 
+function set_folder_new(folder, cnt)
+{
+	folder = folder.replace(/ /g, '');
+	folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
+	console.log("Folder: (%s) = (%s)", folder, cnt);
+	$('#img' + folder).attr('src', '/images/711_1_09_Media_Folder_C.png');
+}
+
+function new_folder_callback(data, status, xhr)
+{
+	//console.log("Status: %s", status);
+	//console.dir(data);
+	$.each(data, set_folder_new);
+}
+
 function delete_callback(file, type, id)
 {
 	var el = 'div.bf#' + id;
@@ -218,5 +233,9 @@ var menuclick = function(action, el, pos)
 	// Load folder sizes
 	$.getJSON('/cgi-bin/browse/sizes.jim?dir=' + encodeURIComponent(dir),
 		folder_size_callback);
+
+	// Flag folders with unwatched items
+	$.getJSON('/cgi-bin/browse/newdir.jim?dir=' + encodeURIComponent(dir),
+		new_folder_callback);
 });
 
diff --git a/var/mongoose/cgi-bin/browse/new.jim b/var/mongoose/cgi-bin/browse/new.jim
deleted file mode 100755
index 8f452dc..0000000
--- a/var/mongoose/cgi-bin/browse/new.jim
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/mod/bin/jimsh
-
-package require cgi
-
-puts "Content-Type: application/json"
-puts ""
-
-cgi_input
-#cgi_dump
-
-set _cgi(dir) "/media/My Video"
-
-set dir [dict get $_cgi dir]
-# Strip double slashes
-regsub -all -- {\/+} "$dir/*" "/" dir
-
-puts "{"
-foreach subdir [glob -nocomplain "$dir"] {
-	set new 0
-	foreach hmt [glob -nocomplain "$subdir/*.hmt"] {
-		puts "HMT: $hmt"
-	}
-}
-puts "}"
-
diff --git a/var/mongoose/cgi-bin/browse/newdir.jim b/var/mongoose/cgi-bin/browse/newdir.jim
new file mode 100755
index 0000000..1f8ca40
--- /dev/null
+++ b/var/mongoose/cgi-bin/browse/newdir.jim
@@ -0,0 +1,34 @@
+#!/mod/bin/jimsh
+
+package require cgi
+package require pack
+
+puts "Content-Type: application/json"
+puts ""
+
+cgi_input
+#cgi_dump
+
+#set _cgi(dir) "/media/My Video"
+
+set root [dict get $_cgi dir]
+# Strip double slashes
+regsub -all -- {\/+} "$root/*" "/" root
+
+puts "{"
+foreach dir [glob -nocomplain "$root"] {
+	if {[file exists "$dir/.series"]} {
+		set fd [open "$dir/.series"]
+		set bytes [read $fd 8]
+		set recs [unpack $bytes -uintle 0 32]
+		set plays [unpack $bytes -uintle 32 32]
+		set diff $($recs - $plays)
+		if {$diff != 0} {
+			set node [lindex [split $dir /] end]
+			puts "\"$node\": $diff,"
+		}
+	}
+}
+puts "\"dummy\" : 0"
+puts "}"
+
diff --git a/var/mongoose/lib/epg_search b/var/mongoose/lib/epg_search
index 59ff42b..5b17fce 100755
--- a/var/mongoose/lib/epg_search
+++ b/var/mongoose/lib/epg_search
@@ -79,6 +79,8 @@ if {[llength $res] > 0} {
 	puts "<tr><td>Keyword Searches</td>"
 	foreach keyword $res {
 		set kw [string range [lindex $keyword 1] 1 end]
+		# Attempt to clean the keyword string.
+		regsub -all {[\000-\037]} $kw "" kw
 		puts "<td><a href=/cgi-bin/epg_search.jim?term=[cgi_quote_url $kw]>$kw
 		    </a></td>"
 	}