diff --git a/CONTROL/control b/CONTROL/control
index b416506..811a034 100644
--- a/CONTROL/control
+++ b/CONTROL/control
@@ -1,7 +1,7 @@
 Package: webif
 Priority: optional
 Section: web
-Version: 1.0.8-2
+Version: 1.0.8-3
 Architecture: mipsel
 Maintainer: af123@hummypkg.org.uk
 Depends: webif-channelicons(>=1.1.8),mongoose(>=3.0-9),jim(>=0.74-4),jim-oo,jim-sqlite3(>=0.74-1),jim-cgi(>=0.7),jim-binary,service-control(>=1.2),busybox(>=1.20.2-1),lsof,epg(>=1.0.13),hmt(>=1.1.14),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.05),ffmpeg,id3v2,multienv(>=1.6)
diff --git a/var/mongoose/cgi-bin/restart.jim b/var/mongoose/cgi-bin/restart.jim
index f673b8e..9dc01b0 100755
--- a/var/mongoose/cgi-bin/restart.jim
+++ b/var/mongoose/cgi-bin/restart.jim
@@ -7,7 +7,7 @@ require rsv.class system.class
 httpheader
 
 if {[cgi_get act] eq "cancel"} {
-	file delete /tmp/.restartpending
+	system restartpending 0
 	exit
 }
 
@@ -18,7 +18,7 @@ if {[cgi_get now] eq "yes"} {
 	exit
 }
 
-file delete /tmp/.restartpending
+system restartpending 0
 header
 
 # Commit pending reservations on older mod versions.
diff --git a/var/mongoose/html/css/style.css b/var/mongoose/html/css/style.css
index 61bff78..2ec2835 100644
--- a/var/mongoose/html/css/style.css
+++ b/var/mongoose/html/css/style.css
@@ -427,7 +427,16 @@ button.red
 
 div#restart_block
 {
+	text-align: center;
 	z-index: 31;
+	float: right;
+	width: 60%;
+	position: absolute;
+	top: 10px;
+	left: 100px;
+	background-color: #f8f8f8;
+	opacity: 0.9;
+	filter:alpha(opacity=90);
 }
 
 img.bmp, img.doublebmp
diff --git a/var/mongoose/html/lib/header.jim b/var/mongoose/html/lib/header.jim
index 3800dff..a25d14d 100755
--- a/var/mongoose/html/lib/header.jim
+++ b/var/mongoose/html/lib/header.jim
@@ -29,9 +29,9 @@ puts {
 }
 
 source /mod/webif/html/lib/topbar.jim
-puts "<div id=restart_block>"
+puts "<center><div id=restart_block>"
 source /mod/webif/include/restart.jim
-puts "</div>"
+puts "</div></center>"
 source /mod/webif/include/diskcheck.jim
 source /mod/webif/include/notify.jim
 
diff --git a/var/mongoose/html/sched/assets.jim b/var/mongoose/html/sched/assets.jim
index d5080a5..c590edb 100755
--- a/var/mongoose/html/sched/assets.jim
+++ b/var/mongoose/html/sched/assets.jim
@@ -15,6 +15,7 @@ puts {
 	<li class=delete><a href=#delete>Delete</a></li>
 	<li class=separator><a href=#ar>Enable AR</a></li>
 	<li class=separator><a href=#folder>Change Folder</a></li>
+	<li class=separator><a href=#mkfolder>Create Folder</a></li>
 </ul>
 
 <div id=padding style="display: none">
diff --git a/var/mongoose/html/sched/mkdir.jim b/var/mongoose/html/sched/mkdir.jim
new file mode 100755
index 0000000..f445aa1
--- /dev/null
+++ b/var/mongoose/html/sched/mkdir.jim
@@ -0,0 +1,32 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/webif/lib/setup
+require rsv.class system.class
+
+httpheader
+
+set slot [cgi_get slot 0]
+set table [cgi_get table TBL_RESERVATION] 
+
+set event [rsv slot $table $slot]
+
+# Humax TV replaces these characters.
+# "%*./:<>?\|
+
+set dir "[system mediaroot]/[\
+    regsub -all {["%*\./:<>?\\|]} [$event get szFPBRecPath] "_"]"
+
+
+if {[file exists $dir]} {
+	puts "Folder $dir already exists."
+} else {
+	if {[catch {file mkdir $dir} msg]} {
+		puts "Failed to create $dir ($msg)"
+	} else {
+		puts "Created $dir"
+	}
+}
+
+system restartpending
+
diff --git a/var/mongoose/html/sched/sched.jim b/var/mongoose/html/sched/sched.jim
index af2f354..947d59c 100755
--- a/var/mongoose/html/sched/sched.jim
+++ b/var/mongoose/html/sched/sched.jim
@@ -24,6 +24,7 @@ puts {
 <script type=text/javascript src=/js/jquery.form.js></script>
 <script type=text/javascript src=script.js></script>
 
+<div id=output class=hidden></div>
 <div id=sdialogue></div>
 }
 
diff --git a/var/mongoose/html/sched/script.js b/var/mongoose/html/sched/script.js
index 940d015..24ba545 100755
--- a/var/mongoose/html/sched/script.js
+++ b/var/mongoose/html/sched/script.js
@@ -148,9 +148,15 @@ function preparemenu(el, menu)
 		$('#optmenu').disableContextMenuItems('#ar');
 
 	if ($(el).attr('table') != 'pending' && $(el).attr('reckind') == 4)
+	{
 		$('#optmenu').enableContextMenuItems('#folder');
+		$('#optmenu').enableContextMenuItems('#mkfolder');
+	}
 	else
+	{
 		$('#optmenu').disableContextMenuItems('#folder');
+		$('#optmenu').disableContextMenuItems('#mkfolder');
+	}
 }
 
 function menuclick(action, el, pos)
@@ -192,6 +198,18 @@ function menuclick(action, el, pos)
 		$('#fchange').dialog('open');
 		break;
 
+	    case 'mkfolder':
+		$('#output')
+                    .empty()
+                    .show('slow')
+                    .load('mkdir.jim?slot=' + sid,
+                        function() {
+                                $(output)
+                                    .css('font-style', 'italic')
+                                    .delay(5000).fadeOut('slow');
+                    });
+		break;
+
 	    default:
 		alert('Unhandled menu event, ' + action);
 	}
diff --git a/var/mongoose/include/restart.jim b/var/mongoose/include/restart.jim
index 15c8bc0..16102dd 100755
--- a/var/mongoose/include/restart.jim
+++ b/var/mongoose/include/restart.jim
@@ -1,13 +1,16 @@
 #!/mod/bin/jimsh
 
 source /mod/webif/lib/setup
-require system.class
 
 if {[file exists /tmp/.restartpending]} {
 
+require system.class rsv.class
+
+if {[rsv count pending] > 0} {
+
 puts {
 	<center>
-	<div style="width: 60%; height: 0.7em;
+	<div style="width: 100%; height: 0.7em;
 	    background: url(/img/stripes.gif) repeat-x;"></div>
 	<div style="font-size: 1.2em; width: 60%; text-align: center; padding: 0.5em">
 	A restart is required in order to complete a scheduling operation.
@@ -28,7 +31,7 @@ puts {
 	<small><button id=restart_cancel>Dismiss</button></small>
 	</font>
 	</div>
-	<div style="width: 60%; height: 0.7em; margin-bottom: 2em;
+	<div style="width: 100%; height: 0.7em;
 	    background: url(/img/stripes.gif) repeat-x;"></div>
 	</center>
 	<script type=text/javascript>
@@ -50,5 +53,9 @@ puts {
 	</script>
 }
 
+} else {
+	system restartpending 0
+}
+
 }
 
diff --git a/var/mongoose/lib/lock b/var/mongoose/lib/lock
index efc281f..5141070 100644
--- a/var/mongoose/lib/lock
+++ b/var/mongoose/lib/lock
@@ -14,13 +14,17 @@ proc _lock_to_port {id} {
 
 proc _lock_dummy {newsock addr port} { }
 
-proc acquire_lock {id} {
+proc acquire_lock {id {timeout 0}} {
 	global _locks
 
 	set port [_lock_to_port $id]
 
-	if {[catch {set socket [socket stream.server "127.0.0.1:$port"]} msg]} {
-		return 0
+	incr timeout [clock seconds]
+
+	while {[catch {set socket [\
+	    socket stream.server "127.0.0.1:$port"]} msg]} {
+		if {[clock seconds] > $timeout} { return 0 }
+		sleep 0.2
 	}
 
 	set _locks($id) $socket
diff --git a/var/mongoose/lib/rsv.class b/var/mongoose/lib/rsv.class
index db9d529..f8dfe1f 100755
--- a/var/mongoose/lib/rsv.class
+++ b/var/mongoose/lib/rsv.class
@@ -309,6 +309,10 @@ proc {rsv list} {{table tbl_reservation} {extra ""}} {
 	return $records
 }
 
+proc {rsv count} {{table tbl_reservation}} {
+	return [llength [rsv list $table]]
+}
+
 proc {rsv lookuptab} {} {
 	set records {}
 	foreach tab {tbl_reservation pending} {
diff --git a/var/mongoose/lib/system.class b/var/mongoose/lib/system.class
index e41b94b..02620ee 100644
--- a/var/mongoose/lib/system.class
+++ b/var/mongoose/lib/system.class
@@ -192,8 +192,12 @@ proc {system reboot} {} {
 	exec /sbin/reboot
 }
 
-proc {system restartpending} {} {
-	close [open /tmp/.restartpending w]
+proc {system restartpending} {{mode 1}} {
+	if {$mode} {
+		close [open /tmp/.restartpending w]
+	} else {
+		file delete /tmp/.restartpending
+	}
 }
 
 proc {system param} {param {type Value} {tbl MENUCONFIG}} {