diff --git a/var/mongoose/html/css/style.css b/var/mongoose/html/css/style.css
index ea9e7d7..61eeb54 100644
--- a/var/mongoose/html/css/style.css
+++ b/var/mongoose/html/css/style.css
@@ -247,6 +247,12 @@ pre, .pre
 	color: black;
 }
 
+.redshade
+{
+	background: #ff4000;
+	color: white;
+}
+
 img.progress
 {
 	background: transparent url(/img/percentback.png) top left no-repeat;
diff --git a/var/mongoose/html/diag/diag.jim b/var/mongoose/html/diag/diag.jim
index b4a0b5a..558c848 100755
--- a/var/mongoose/html/diag/diag.jim
+++ b/var/mongoose/html/diag/diag.jim
@@ -46,6 +46,7 @@ puts {
 
 <tr>
 <td colspan=2 align=center>
+<button id=diskdiag style="width: 48%">Hard Disc</button>
 <button id=channelinfo style="width: 48%">Channel Information</button>
 </td>
 </tr>
diff --git a/var/mongoose/html/diag/disk.jim b/var/mongoose/html/diag/disk.jim
new file mode 100755
index 0000000..1fdad3b
--- /dev/null
+++ b/var/mongoose/html/diag/disk.jim
@@ -0,0 +1,162 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/webif/lib/setup
+require system.class
+
+puts "Content-Type: text/html"
+puts ""
+
+header
+
+set space [system diskspace]
+set device [string range [lindex $space 5] 0 end-1]
+
+set smart Unknown
+set line ""
+# smartctl uses non-zero exit status to indicate health hence catch.
+catch { set line [exec /mod/bin/smartctl -H $device | sed -n 5p] } msg
+if {$msg ne "" && $line eq ""} { set line $msg }
+if {$line ne ""} {
+	set smart [string range [lindex [split $line :] 1] 1 end]
+}
+
+puts "
+<h3 class=va>
+	<img class=va width=100 src=/img/disc.png>
+	SMART data read from device $device
+</h3>
+<fieldset class=cleft>
+<legend>Disk Information</legend>
+<table>
+<tr><th class=key>SMART Status</th><td>$smart<td></tr>
+"
+foreach line [split [exec /mod/bin/smartctl -i $device] "\n"] {
+	if {[string match "*Not in smartctl database*" $line]} continue
+	if {[string match "*: *" $line]} {
+		regsub -all -- {[[:space:]]+} $line " " line
+		set fields [split $line ":"]
+		puts "<tr><th class=key>[lindex $fields 0]</th>"
+		puts "<td>[join [lrange $fields 1 end] :]</td></tr>"
+	}
+}
+puts {
+</table>
+</fieldset>
+
+<fieldset class=cleft>
+<legend>Attributes</legend>
+<table class=borders cellpadding=3>
+<tr>
+	<th class=odd>ID</th>
+	<th class=odd>Name</th>
+	<th class=odd>Flags</th>
+	<th class=odd>Raw Value</th>
+	<th class=odd>Value</th>
+	<th class=odd>Worst</th>
+	<th class=odd>Thresh</th>
+	<th class=odd>Type</th>
+	<th class=odd>Updated</th>
+	<th class=odd>When Failed</th>
+</tr>
+}
+
+#set flag_autokeep 	0x20
+#set flag_count		0x10
+#set flag_rate		0x08
+#set flag_speed		0x04
+#set flag_online	0x02
+#set flag_prefailure	0x01
+
+set flaglist [split "POSRCK" ""]
+set flagdescr [list \
+	"P prefailure warning" \
+	"O updated online" \
+	"S speed/performance" \
+	"R error rate" \
+	"C event count" \
+	"K auto-keep" \
+]
+
+proc flags {val} {
+	global flaglist flagdescr
+	set f ""
+	set fx ""
+	loop i 0 [llength $flaglist] {
+		if {[expr $val & (1 << $i)]} {
+			append f [lindex $flaglist $i]
+			append fx "[lindex $flagdescr $i]\n"
+		} else {
+			append f "-"
+		}
+	}
+	return "<span title=\"$fx\">$f</span>"
+}
+
+set i 0
+foreach line [split [exec /mod/bin/smartctl -A $device] "\n"] {
+	regsub -all -- {[[:space:]]+} $line " " line
+	regsub -all -- {^[[:space:]]+} $line "" line
+	if {[incr i] < 8} continue
+	lassign [split $line] \
+	    id name flags val worst thresh type updated when rval
+	set class normal
+	switch $id {
+		5 { if {$rval > 0} { set class orangeshade } }
+		197 { if {$rval > 0} { set class redshade } }
+		198 { if {$rval > 0} { set class redshade } }
+	}
+	puts "<tr class=$class>"
+	puts "
+		<td>$id</td>
+		<td>$name</td>
+		<td>[flags $flags]</td>
+		<td>$rval</td>
+		<td>$val</td>
+		<td>$worst</td>
+		<td>$thresh</td>
+		<td>$type</td>
+		<td>$updated</td>
+		<td>$when</td>
+	</tr>"
+}
+
+puts {
+</table>
+</fieldset>
+
+<fieldset class=cleft>
+<legend>Self-test logs</legend>
+<table class=borders cellpadding=3>
+<tr>
+	<th class=odd>No.</th>
+	<th class=odd>Description</th>
+	<th class=odd>Status</th>
+	<th class=odd>Remaining</th>
+	<th class=odd>When</th>
+	<th class=odd>First Error LBA</th>
+</tr>
+}
+
+set i 0
+foreach line [split [exec /mod/bin/smartctl -l selftest $device] "\n"] {
+	regsub -all -- {[[:space:]][[:space:]]+} $line "|" line
+	if {[incr i] < 7} continue
+	lassign [split $line "|"] id name status remaining when lba
+	puts "<tr>
+		<td>$id</td>
+		<td>$name</td>
+		<td>$status</th>
+		<td>$remaining</th>
+		<td>$when</th>
+		<td>$lba</th>
+	</tr>"
+}
+
+puts {
+</table>
+</fieldset>
+}
+
+footer
+
diff --git a/var/mongoose/html/diag/script.js b/var/mongoose/html/diag/script.js
index e31b0ff..f4b2b3b 100644
--- a/var/mongoose/html/diag/script.js
+++ b/var/mongoose/html/diag/script.js
@@ -49,6 +49,11 @@ $('#channelinfo').click(function(e) {
 	window.location = '/cgi-bin/channel.jim';
 });
 
+$('#diskdiag').click(function(e) {
+	e.preventDefault();
+	window.location = 'disk.jim';
+});
+
 $('#dlna').click(function(e) {
 	e.preventDefault();
 	window.location = '/dlna/dlna.jim';
diff --git a/var/mongoose/html/img/disc.png b/var/mongoose/html/img/disc.png
new file mode 100644
index 0000000..1b21e1c
Binary files /dev/null and b/var/mongoose/html/img/disc.png differ
diff --git a/var/mongoose/html/m/channel.jim b/var/mongoose/html/m/channel.jim
index d189cc5..8d4761d 100755
--- a/var/mongoose/html/m/channel.jim
+++ b/var/mongoose/html/m/channel.jim
@@ -30,7 +30,7 @@ foreach e $records {
 	set nday [clock format $st -format "%F"]
 	if {$day ne $nday} {
 		set day $nday
-		puts "<li data-role=list-divider>
+		puts "<li class=stick data-role=list-divider>
 		    [clock format $st -format "%a %d %b %Y"]
 		    </li>"
 	}
diff --git a/var/mongoose/html/m/index.jim b/var/mongoose/html/m/index.jim
index f940802..deb7616 100755
--- a/var/mongoose/html/m/index.jim
+++ b/var/mongoose/html/m/index.jim
@@ -22,9 +22,9 @@ proc tb {icon txt link {height 80} {width 0}} {
 if {[file exists "/mod/bin/ir"]} {
 	tb "/img/remote.png" "Remote" "/plugin/ir/m/index.jim\" rel=\"external"
 }
+tb "/images/328_1_26_Menu_TV_Guide.png" "Now/Next" "nownext.jim"
 tb "/images/323_1_10_Menu_Video.png" "Browse" "#"
 tb "/images/321_1_00_Menu_CHList.png" "Schedule" "#"
-tb "/images/328_1_26_Menu_TV_Guide.png" "Now/Next" "nownext.jim"
 tb "/img/spanner.png" "Services" "#"
 tb "/img/packages.png" "Packages" "#"
 tb "/images/326_1_00_Menu_Settings.png" "Settings" \
diff --git a/var/mongoose/html/m/lib/header.jim b/var/mongoose/html/m/lib/header.jim
index 32e7300..1dee4b3 100755
--- a/var/mongoose/html/m/lib/header.jim
+++ b/var/mongoose/html/m/lib/header.jim
@@ -34,10 +34,12 @@ puts {
 </head> 
 }
 
+set pageid [string range $env(SCRIPT_NAME) 3 end-4]
+
 puts "
 <body> 
 
-<div data-role=page data-add-back-btn=true>
+<div data-role=page data-add-back-btn=true id=${pageid}page>
 
  <div class=\"hidden status\"></div>
 
diff --git a/var/mongoose/html/m/script.js b/var/mongoose/html/m/script.js
index 119a33e..28e5380 100644
--- a/var/mongoose/html/m/script.js
+++ b/var/mongoose/html/m/script.js
@@ -5,3 +5,7 @@ $(document).bind('pageinit', function() {
 	});
 });
 
+//$(document).delegate('#channelpage', 'pageinit', function() {
+	//console.log('pageinit for channelpage');
+//});
+
diff --git a/var/mongoose/html/m/style.css b/var/mongoose/html/m/style.css
index 6dbd436..af953dc 100644
--- a/var/mongoose/html/m/style.css
+++ b/var/mongoose/html/m/style.css
@@ -1,3 +1,4 @@
+
 .va
 {
 	vertical-align: middle;
@@ -25,3 +26,14 @@ div.status
 	background: transparent;
 }
 
+li.stick
+{
+	display: block;
+}
+
+li.sticky
+{
+	position: absolute;
+	top: 0;
+}
+
diff --git a/var/mongoose/lib/system.class b/var/mongoose/lib/system.class
index e9861b1..32eaa25 100644
--- a/var/mongoose/lib/system.class
+++ b/var/mongoose/lib/system.class
@@ -92,10 +92,12 @@ proc {system diskspace} {} {
 	set used 0
 	set free 0
 	set perc 0
+	set dev 0
 	foreach line [split [exec /mod/bin/busybox/df -h $part 2>>/dev/null] "\n\r"] {
 		if {[string match "/*" $line]} {
 			regsub -all -- {[[:space:]]+} $line " " line
 			set fields [split $line]
+			set dev [lindex $fields 0]
 			set size [lindex $fields 1]
 			set used [lindex $fields 2]
 			set free [lindex $fields 3]
@@ -105,7 +107,7 @@ proc {system diskspace} {} {
 		}
 	}
 
-	return [list $size $used $perc $free $fperc]
+	return [list $size $used $perc $free $fperc $dev]
 }
 
 proc {system busy} {} {