diff -upr ../work/signup/includes/signup_cancel.inc signup/includes/signup_cancel.inc
--- ../work/signup/includes/signup_cancel.inc	2009-01-24 19:10:58.000000000 -0800
+++ signup/includes/signup_cancel.inc	2009-10-11 16:20:53.325584112 -0700
@@ -9,6 +9,20 @@
 
 function signup_cancel_signup_page($signup, $token) {
   if (signup_valid_token($token, $signup->sid, 'cancel')) {
+    // Logic for checking cancel time window
+    $node = node_load($signup->nid);
+    // Check permissions.
+    $admin = _signup_menu_access($node, 'admin');
+    $open = !_signup_node_completed($node);
+    $can_cancel = $admin || $open;
+    if (!$can_cancel) {	// check if signups closed
+      // page for closed signups
+      $type = 'tab';	// 'node'? 'tab'? 'admin'?
+      module_load_include('inc', 'signup', 'includes/node_output');
+      $current_signup = _signup_render_signup_edit_form($signup, $type);
+      return theme('signup_signups_closed', $node, $current_signup);
+    }
+	
     return drupal_get_form('signup_cancel_link_confirm_form', $signup->sid);
   }
   drupal_set_message(t('Invalid link to cancel a signup.'), 'error');
diff -upr ../work/signup/includes/signup_edit_form.inc signup/includes/signup_edit_form.inc
--- ../work/signup/includes/signup_edit_form.inc	2009-09-18 17:33:42.000000000 -0700
+++ signup/includes/signup_edit_form.inc	2009-10-11 16:19:33.000000000 -0700
@@ -30,8 +30,9 @@ function signup_edit_form($form_state, $
   // Check permissions.
   $admin = _signup_menu_access($node, 'admin');
   $own = !empty($user->uid) && $user->uid == $signup->uid;
-  $can_cancel = $admin || (user_access('cancel own signups') && $own);
-  $can_edit = $admin || (user_access('edit own signups') && $own);
+  $open = !_signup_node_completed($node);
+  $can_cancel = $admin || (user_access('cancel own signups') && $own && $open);
+  $can_edit = $admin || (user_access('edit own signups') && $own && $open);
 
   if ($type == 'admin') {
     $title = t("Information for !user's signup to !node", array('!user' => _signup_get_username($signup, TRUE), '!node' => l($node->title, 'node/'. $node->nid)));
diff -upr ../work/signup/modules/signup_confirm_email/signup_confirm_email.inc signup/modules/signup_confirm_email/signup_confirm_email.inc
--- ../work/signup/modules/signup_confirm_email/signup_confirm_email.inc	2009-09-20 23:56:40.000000000 -0700
+++ signup/modules/signup_confirm_email/signup_confirm_email.inc	2009-10-11 16:17:57.000000000 -0700
@@ -30,7 +30,8 @@ function signup_confirm_email_alter_sign
     $node = node_load($signup->nid);
     $admin = _signup_menu_access($node, 'admin');
     $own = !empty($user->uid) && $user->uid == $signup->uid;
-    $can_edit = $admin || (user_access('edit own signups') && $own);
+    $open = !_signup_node_completed($node);
+    $can_edit = $admin || (user_access('edit own signups') && $own && $open);
     if (!$can_edit) {
       return;
     }
