diff --git a/components/signup.php b/components/signup.php
index 04a5b4140cf364e8bb5f6264eb851163154bcc68..93c395e6fa4891009d970a80ee6f55c4aedc8a92 100644
--- a/components/signup.php
+++ b/components/signup.php
@@ -11,6 +11,11 @@
 
 $script_path="/home/member/eclipse/signuptests/";
 
+$override_permission="staff";
+
+// is the validation (mostly) overridable
+$overridable=isset($session->groups[$permission]);
+
 //set defaults
 $mode = 'login';
 
@@ -38,13 +43,15 @@ if(isset($_REQUEST['signupid'])&&isset($_REQUEST['signuppw'])){
 	$row=$data[0];
 	// if the id hasnt already been used
 	if(!(isset($row[activated])&&isset($row[username]))){
-	    // pass on the id and passwd
+	    // pass on the id and passwd and id the validation is overridable
 	    $smarty->assign("signupid",$signupid);
 	    $smarty->assign("signuppw",$signuppw);
+	    $smarty->assign("overridable",$overridable);
 	    $smarty->assign("usertype",$row[type]);
 	    // if accepting the form
 	    if(isset($_REQUEST['username']) && isset($_REQUEST['realname']) && isset($_REQUEST['email']) && isset($_REQUEST['phone'])){
 		require_once("../lib/validation.php");
+		$override = $overridable && (isset($_POST['override']) && $_POST['override']=="on");
 		$valid=true;
 		$errors=array();
 		$fields=array();
@@ -53,42 +60,42 @@ if(isset($_REQUEST['signupid'])&&isset($_REQUEST['signuppw'])){
 		    $errors['username']=$error;
 		}
 		$fields['username']=$_REQUEST['username'];
-		if(!validSignupEmail($_REQUEST['email'])){
+		if(!(validSignupEmail($_REQUEST['email']) || $override)){
 		    $valid=false;
 		    $errors['email']=$error;
 		}
 		$fields['email']=$_REQUEST['email'];
-		if(!validPhone($_REQUEST['phone'])){
+		if(!(validPhone($_REQUEST['phone']) || $override)){
 		    $valid=false;
 		    $errors['phone']=$error;
 		}
 		$fields['phone']=$_REQUEST['phone'];
 		if($row[type]!=2){
-		    if(!validAddress($_REQUEST['address'])){
+		    if(!(validAddress($_REQUEST['address']) || $override)){
 			$valid=false;
 			$errors['address']=$error;
 		    }
 		    $fields['address']=$_POST['address'];
-		    if(!validRealName($_REQUEST['realname'])){
+		    if(!validRealName($_REQUEST['realname'],$override)){
 			$valid=false;
 			$errors['realname']=$error;
 		    }
 		    $fields['realname']=$_REQUEST['realname'];
 		}
 		else{
-		    if(!validRealName($_REQUEST['contact'])){
+		    if(!(validRealName($_REQUEST['contact'],false) || $override)){
 			$valid=false;
 			$errors['contact']=$error;
 		    }
 		    $fields['contact']=$_REQUEST['contact'];
-		    if(!validSocName($_REQUEST['realname'])){
+		    if(!validSocName($_REQUEST['realname'], $override)){
 			$valid=false;
 			$errors['realname']=$error;
 		    }
 		    $fields['realname']=$_REQUEST['realname'];
 		}
 		if($row[type]==1){
-			if(!validSID($_REQUEST['studentid'])){
+			if(!validSID($_REQUEST['studentid'],$override)){
 			    $valid=false;
 			    $errors['studentid']=$error;
 			}
diff --git a/components/signupajax.php b/components/signupajax.php
index dd455917b3453ccfe29af2f41e2d2609d47f5017..522dd9676bf7b24d87d0d708296115a2a09a4767 100644
--- a/components/signupajax.php
+++ b/components/signupajax.php
@@ -7,7 +7,7 @@ if (isset($_GET['key'])){
 	switch($_GET['key']){
 	case "sid":
 		$sid=$_GET['value'];
-		if(validSID($sid)){
+		if(validSID($sid,false)){
 			echo "OK:".lookupSID($_GET['value']);
 		}
 		else{
@@ -29,7 +29,7 @@ if (isset($_GET['key'])){
 		break;
 	case "realname":
 		$realname = $_GET['value'];
-		if(validRealName($realname)){
+		if(validRealName($realname,false)){
 			echo "OK";
 		}
 		else{
@@ -38,7 +38,7 @@ if (isset($_GET['key'])){
 		break;
 	case "socname":
 		$socname = $_GET['value'];
-		if(validSocName($socname)){
+		if(validSocName($socname,false)){
 			echo "OK";
 		}
 		else{
diff --git a/htdocs/js/signup.js b/htdocs/js/signup.js
index 63f307781db4b961672d2e64f97c49bdef557047..5f784242db70d7d4680b7d9b089cb20376e8c606 100644
--- a/htdocs/js/signup.js
+++ b/htdocs/js/signup.js
@@ -7,7 +7,7 @@ function validate(){
 			break;
 		}
 	}
-	if(valid){
+	if(valid || ($('input#override:checked').size()==1)){
 		$('input#submit').removeAttr("disabled");
 	}
 	else{
@@ -233,5 +233,6 @@ $(function(){
         //validate phone number
         $("input#phone").change(processPhone);
 	$("textarea#address").change(processAddress);
+	$("input#override").change(validate);
 })
 
diff --git a/lib/validation.php b/lib/validation.php
index 37ded2741555fab861a22c5c2e7a872b1add2d38..f8e802c19ae2e31716ca7a921fc117e0be1308b1 100644
--- a/lib/validation.php
+++ b/lib/validation.php
@@ -148,38 +148,59 @@ function validUsername ($username){
 		return true;
 	}
 }
-function validSID($SID){
+function validSID($SID,$override){
 	global $error;
-	if(!eregi("^[0-9]*$", $SID) || strlen($SID) != 6){
-		$error = "Invalid student ID";
-		return false;
-	}
-	elseif(sidUsed($SID)){
-		$error = "A user with that student ID already exsists, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
-		return false;
-	}
-	elseif(lookupSID($SID)==" "){
-		$error = "Student not found, email<a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
-		return false;
+	if($override){
+		if($SID==""){
+			$error = "You MUST provide some sort of student number";
+			return false;
+		}
+		else{
+			return true;
+		}
 	}
 	else{
-		return true;
+		if(!eregi("^[0-9]*$", $SID) || strlen($SID) != 6){
+			$error = "Invalid student ID";
+			return false;
+		}
+		elseif(sidUsed($SID)){
+			$error = "A user with that student ID already exsists, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
+			return false;
+		}
+		elseif(lookupSID($SID)==" "){
+			$error = "Student not found, email<a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
+			return false;
+		}
+		else{
+			return true;
+		}
 	}
 }
-function validRealName($realName){
+function validRealName($realName,$override){
 	global $error;
-        //check for enough names for real name (we insist on at least 2
-        if(count(explode(" ",$realName)) < 2)
-        {
-		$error = "Too few names given, please give at least two.";
-		return false;
-        }
-        //check for a sane realname, see comment below
-	elseif (!ereg("^([A-Z]([.]+ +[A-Z])*([\']+[A-Z])*[a-z]+[ -]*)+$", $realName))
-        {
-		$error = "Name incorrectly formated, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
-		return false;
-        }
+	if($override){
+		if($realName==""){
+			$error="You MUST provide some sort of name";
+			return false;
+		}
+		else{
+			return true;
+		}
+	}
+	else{
+	        //check for enough names for real name (we insist on at least 2
+	        if(count(explode(" ",$realName)) < 2)
+	        {
+			$error = "Too few names given, please give at least two.";
+			return false;
+	        }
+	        //check for a sane realname, see comment below
+		elseif (!ereg("^([A-Z]([.]+ +[A-Z])*([\']+[A-Z])*[a-z]+[ -]*)+$", $realName))
+	        {
+			$error = "Name incorrectly formated, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
+			return false;
+	        }
 /* 
  * This should force sane real names, with capitals for the first letter of each word,
  * Whist alowing for complex names such as Robin M. O'Leary
@@ -203,18 +224,30 @@ function validRealName($realName){
  * RObin M O'Leary is not
  *
  */	
-	else{
-		return true;
+		else{
+			return true;
+		}
 	}
 }
-function validSocName($socname){
+function validSocName($socname,$override){
 	global $error;
-	if(!ereg('^[A-Z1-9]',$socname) || strlen($socname) < 2){
-		$error = "Must start with a capital letter or a number and be more than 1 character";
-		return false;
+	if($override){
+		if($socname==""){
+			$error="You MUST provide some sort of name";
+			return false;
+		}
+		else{
+			return true;
+		}
 	}
 	else{
-		return true;
+		if(!ereg('^[A-Z1-9]',$socname) || strlen($socname) < 2){
+			$error = "Must start with a capital letter or a number and be more than 1 character";
+			return false;
+		}
+		else{
+			return true;
+		}
 	}
 }
 
diff --git a/templates/signup.tpl b/templates/signup.tpl
index 57ff3e4fce23c6e18c950d67b542b735cef0d1f8..e2e8cc8590a162727bc027482e66c93775732bf7 100644
--- a/templates/signup.tpl
+++ b/templates/signup.tpl
@@ -74,7 +74,13 @@
                                         <label for="phone">Phone Number</label>
                                         <span class="textinput"><input type="text" id="phone" name="phone" size="30" {if $mode=='re-form'}value='{$fields.phone}'{/if}/></span>
 					<div id="phonemessage"{if $mode=='re-form'}{if isset($errors.phone)} style="color:red">{$errors.phone}{else} style="color:green">OK{/if}{else}>{/if}</div>
-                                </div>
+				</div>
+				{if $overridable}
+				<div class="row" id="overridediv">
+					<label for="overridable">Override Validation</label>
+					<span class="textinput"><input type="checkbox" id="override" name="override" /></span>
+				</div>
+				{/if}
 			<input type="hidden" id="signupid" name="signupid" value="{$signupid}" />
 			<input type="hidden" id="signuppw" name="signuppw" value="{$signuppw}" />
                         <div class="row" id="submitdiv">