diff --git a/admin/project_editor.php b/admin/project_editor.php
index b3dd1b0e..9c3993d6 100644
--- a/admin/project_editor.php
+++ b/admin/project_editor.php
@@ -22,134 +22,134 @@
 */
 ?>
 <?
- require("../common.inc.php");
- require_once("../user.inc.php");
- require("../register_participants.inc.php");
+ require_once('../common.inc.php');
+ require_once('../user.inc.php');
+ require_once('../register_participants.inc.php');
  user_auth_required('committee', 'admin');
- 
- //send the header
- send_header("Project Editor",
- 	array('Committee Main' => 'committee_main.php',
-		'Administration' => 'admin/index.php',
-		'Participant Registration' => 'admin/registration.php',
-		'Registration List and Statistics' => 'admin/registration_list.php')
-			);
 
- echo "<br />";
+$registrations_id=intval($_GET['id']);
+$action = $_GET['action'];
 
- if($_POST['registration_id']) $registration_id=$_POST['registration_id'];
- else if($_GET['registration_id']) $registration_id=$_GET['registration_id'];
+switch($action) {
+case 'project_load':
+	project_load();
+	break;
+case 'project_regenerate_number':
+	/* Save first */
+	project_save();
 
+	/* Now generate */
+	$q=mysql_query("SELECT id FROM projects WHERE registrations_id='{$registrations_id}' AND year='{$config['FAIRYEAR']}'");
+	$i=mysql_fetch_assoc($q);
+	$id = $i['id'];
 
- if($_POST['action']=="genprojnum") {
- 	$id = intval($_POST['id']);
 	mysql_query("UPDATE projects SET projectnumber=NULL,projectsort=NULL,
 				projectnumber_seq='0',projectsort_seq='0'
 				WHERE id='$id'");
 	echo mysql_error();
- 	list($pn,$ps,$pns,$pss) = generateProjectNumber($registration_id);
+ 	list($pn,$ps,$pns,$pss) = generateProjectNumber($registrations_id);
 //	print("Generated Project Number [$pn]");
 	mysql_query("UPDATE projects SET projectnumber='$pn',projectsort='$ps',
 				projectnumber_seq='$pns',projectsort_seq='$pss'
 				WHERE id='$id'");
-	echo mysql_error();
- }
+	happy_("Generated and Saved Project Number: $pn");
+	break;
 
- if($_POST['action']=="save")
- {
-//	{
-		//first, lets make sure this project really does belong to them
-		$q=mysql_query("SELECT * FROM projects WHERE id='".$_POST['id']."' AND registrations_id='".$registration_id."' AND year='".$config['FAIRYEAR']."'");
-		if($projectinfo=mysql_fetch_object($q))
-		{
-			$summarywords=preg_split("/[\s,]+/",$_POST['summary']);
-			$summarywordcount=count($summarywords);
-			if($summarywordcount>$config['participant_project_summary_wordmax'])
-				$summarycountok=0;
-			else
-				$summarycountok=1;
+case 'project_save':
+	project_save();
+	break;
+default:
+	break;
+}
 
-			if($config['participant_project_title_charmax'] && strlen(stripslashes($_POST['title']))>$config['participant_project_title_charmax'])  //0 for no limit, eg 255 database field limit
-			{
-				$title=substr(stripslashes($_POST['title']),0,$config['participant_project_title_charmax']);
-				echo error(i18n("Project title truncated to %1 characters",array($config['participant_project_title_charmax'])));
-			}
-			else
-				$title=stripslashes($_POST['title']);
+exit;
 
-			mysql_query("UPDATE projects SET ".
-					"title='".mysql_escape_string($title)."', ".
-					"projectdivisions_id='".$_POST['projectdivisions_id']."', ".
-					"language='".mysql_escape_string(stripslashes($_POST['language']))."', ".
-					"req_table='".mysql_escape_string(stripslashes($_POST['req_table']))."', ".
-					"req_electricity='".mysql_escape_string(stripslashes($_POST['req_electricity']))."', ".
-					"req_special='".mysql_escape_string(stripslashes($_POST['req_special']))."', ".
-					"summary='".mysql_escape_string(stripslashes($_POST['summary']))."', ".
-					"summarycountok='$summarycountok',".
-					"projectsort='".mysql_escape_string(stripslashes($_POST['projectsort']))."'".
-					"WHERE id='".$_POST['id']."'");
-					echo mysql_error();
-			echo notice(i18n("Project information successfully updated"));
+function project_save()
+{
+	global $registrations_id, $config;
 
-			//check if they changed the project number
-			if($_POST['projectnumber']!=$projectinfo->projectnumber)
-			{
-				//check if hte new one is available
-				$q=mysql_query("SELECT * FROM projects WHERE year='".$config['FAIRYEAR']."' AND projectnumber='".$_POST['projectnumber']."'");
-				if(mysql_num_rows($q))
-				{
-					echo error(i18n("Could not change project number.  %1 is already in use",array($_POST['projectnumber'])));
-				}
-				else
-				{
-					mysql_query("UPDATE projects SET
-							projectnumber='".$_POST['projectnumber']."'
-							WHERE id='".$_POST['id']."'");
-					echo happy(i18n("Project number successfully changed to %1",array($_POST['projectnumber'])));
-				}
-			}
-		}
-		else
-		{
-			echo error(i18n("Invalid project to update"));
-		}
-	//}
- }
-
-
- //now lets find out their MAX grade, so we can pre-set the Age Category
- $q=mysql_query("SELECT MAX(grade) AS maxgrade FROM students WHERE registrations_id='".$registration_id."'");
- $gradeinfo=mysql_fetch_object($q);
-
- //now lets grab all the age categories, so we can choose one based on the max grade
- $q=mysql_query("SELECT * FROM projectcategories WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
- while($r=mysql_fetch_object($q))
- {
- 	//save these in an array, just incase we need them later (FIXME: remove this array if we dont need it)
-	$agecategories[$r->id]['category']=$r->category;
-	$agecategories[$r->id]['mingrade']=$r->mingrade;
-	$agecategories[$r->id]['maxgrade']=$r->maxgrade;
-
-	if($gradeinfo->maxgrade >= $r->mingrade && $gradeinfo->maxgrade <= $r->maxgrade)
-	{
-		$projectcategories_id=$r->id;
+	//first, lets make sure this project really does belong to them
+	$q=mysql_query("SELECT * FROM projects WHERE registrations_id='{$registrations_id}' AND year='{$config['FAIRYEAR']}'");
+	$projectinfo=mysql_fetch_object($q);
+	if(!projectinfo) {
+		echo error(i18n("Invalid project to update"));
 	}
- }
- //now select their project info
- $q=mysql_query("SELECT * FROM projects WHERE registrations_id='".$registration_id."' AND year='".$config['FAIRYEAR']."'");
- //check if it exists, if we didnt find any record, lets insert one
- $projectinfo=mysql_fetch_object($q);
 
- //make sure that if they changed their grade on the student page, we update their projectcategories_id accordingly
- if($projectcategories_id && $projectinfo->projectcategories_id!=$projectcategories_id)
- {
- 	echo notice(i18n("Age category changed, updating to %1",array($agecategories[$projectcategories_id]['category'])));
-	mysql_query("UPDATE projects SET projectcategories_id='$projectcategories_id' WHERE id='$projectinfo->id'");
- }
+	$summarywords=preg_split("/[\s,]+/",$_POST['summary']);
+	$summarywordcount=count($summarywords);
+	if($summarywordcount>$config['participant_project_summary_wordmax'])
+		$summarycountok=0;
+	else
+		$summarycountok=1;
+
+	if($config['participant_project_title_charmax'] && strlen(stripslashes($_POST['title']))>$config['participant_project_title_charmax']) {  //0 for no limit, eg 255 database field limit 
+		$title=substr(stripslashes($_POST['title']),0,$config['participant_project_title_charmax']);
+		error_("Project title truncated to %1 characters",array($config['participant_project_title_charmax']));
+	} else
+		$title=stripslashes($_POST['title']);
+
+	mysql_query("UPDATE projects SET ".
+			"title='".mysql_escape_string($title)."', ".
+			"projectdivisions_id='".$_POST['projectdivisions_id']."', ".
+			"language='".mysql_escape_string(stripslashes($_POST['language']))."', ".
+			"req_table='".mysql_escape_string(stripslashes($_POST['req_table']))."', ".
+			"req_electricity='".mysql_escape_string(stripslashes($_POST['req_electricity']))."', ".
+			"req_special='".mysql_escape_string(stripslashes($_POST['req_special']))."', ".
+			"summary='".mysql_escape_string(stripslashes($_POST['summary']))."', ".
+			"summarycountok='$summarycountok',".
+			"projectsort='".mysql_escape_string(stripslashes($_POST['projectsort']))."'".
+			"WHERE id='".$_POST['id']."'");
+			echo mysql_error();
+	happy_("Project information successfully updated");
+
+	//check if they changed the project number
+	if($_POST['projectnumber']!=$projectinfo->projectnumber) {
+		//check if hte new one is available
+		$q=mysql_query("SELECT * FROM projects WHERE year='".$config['FAIRYEAR']."' AND projectnumber='".$_POST['projectnumber']."'");
+		if(mysql_num_rows($q)) {
+			error_("Could not change project number.  %1 is already in use",array($_POST['projectnumber']));
+		} else {
+			mysql_query("UPDATE projects SET
+					projectnumber='".$_POST['projectnumber']."'
+					WHERE id='".$_POST['id']."'");
+			happy_("Project number successfully changed to %1",array($_POST['projectnumber']));
+		}
+	}
+}
 
 
+function project_load()
+{
+	global $registrations_id, $config;
 
-//output the current status
+	//now lets find out their MAX grade, so we can pre-set the Age Category
+	$q=mysql_query("SELECT MAX(grade) AS maxgrade FROM students WHERE registrations_id='".$registrations_id."'");
+	$gradeinfo=mysql_fetch_object($q);
+
+	//now lets grab all the age categories, so we can choose one based on the max grade
+	$q=mysql_query("SELECT * FROM projectcategories WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
+	while($r=mysql_fetch_object($q)) {
+		//save these in an array, just incase we need them later (FIXME: remove this array if we dont need it)
+		$agecategories[$r->id]['category']=$r->category;
+		$agecategories[$r->id]['mingrade']=$r->mingrade;
+		$agecategories[$r->id]['maxgrade']=$r->maxgrade;
+
+		if($gradeinfo->maxgrade >= $r->mingrade && $gradeinfo->maxgrade <= $r->maxgrade)
+			$projectcategories_id=$r->id;
+	}
+
+	//now select their project info
+	$q=mysql_query("SELECT * FROM projects WHERE registrations_id='".$registrations_id."' AND year='".$config['FAIRYEAR']."'");
+	//check if it exists, if we didnt find any record, lets insert one
+	$projectinfo=mysql_fetch_object($q);
+
+	//make sure that if they changed their grade on the student page, we update their projectcategories_id accordingly
+	if($projectcategories_id && $projectinfo->projectcategories_id!=$projectcategories_id) {
+		echo notice(i18n("Age category changed, updating to %1",array($agecategories[$projectcategories_id]['category'])));
+		mysql_query("UPDATE projects SET projectcategories_id='$projectcategories_id' WHERE id='$projectinfo->id'");
+	}
+
+	//output the current status
 ?>
 
 <script language="javascript" type="text/javascript">
@@ -172,87 +172,95 @@ function countwords()
 }
 </script>
 <?
-if($projectinfo)
-{
 
- echo "<form name=\"projectform\" method=\"post\" action=\"project_editor.php\">\n";
- echo "<input type=\"hidden\" name=\"action\" value=\"save\">\n";
- echo "<input type=\"hidden\" name=\"id\" value=\"$projectinfo->id\">\n";
- echo "<input type=\"hidden\" name=\"registration_id\" value=\"$registration_id\">\n";
- echo "<table>\n";
- echo "<tr><td>".i18n("Project Title").": </td><td><input type=\"text\" name=\"title\" size=\"50\" value=\"".htmlspecialchars($projectinfo->title)."\" />".REQUIREDFIELD;
- if($config['participant_project_title_charmax'])
- 	echo i18n("(Max %1 characters)",array($config['participant_project_title_charmax']));
- echo "</td></tr>\n";
- echo "<tr><td>".i18n("Project Number").": </td><td><input type=\"text\" name=\"projectnumber\" size=\"10\" value=\"$projectinfo->projectnumber\" />";
- echo "<tr><td>".i18n("Project Sort").": </td><td><input type=\"text\" name=\"projectsort\" size=\"10\" value=\"$projectinfo->projectsort\" />";
- echo "<tr><td>".i18n("Age Category").": </td><td>";
-	echo i18n($agecategories[$projectcategories_id]['category']);
-	echo " (".i18n("Grades %1-%2",array($agecategories[$projectcategories_id]['mingrade'],$agecategories[$projectcategories_id]['maxgrade'])).")";
- echo "</td></tr>";
- echo "<tr><td>".i18n("Division").": </td><td>";
-
-//###### Feature Specific - filtering divisions by category
- if($config['filterdivisionbycategory']=="yes"){
-	$q=mysql_query("SELECT projectdivisions.* FROM projectdivisions,projectcategoriesdivisions_link WHERE projectdivisions.id=projectdivisions_id AND projectcategories_id=".$projectcategories_id." AND projectdivisions.year='".$config['FAIRYEAR']."' AND projectcategoriesdivisions_link.year='".$config['FAIRYEAR']."' ORDER BY division"); 
-	echo mysql_error();
-//###
-}else
- 	$q=mysql_query("SELECT * FROM projectdivisions WHERE year='".$config['FAIRYEAR']."' ORDER BY division");
- echo "<select name=\"projectdivisions_id\">";
- echo "<option value=\"\">".i18n("Select a division")."</option>\n";
- while($r=mysql_fetch_object($q))
- {
- 	if($r->id == $projectinfo->projectdivisions_id) $sel="selected=\"selected\""; else $sel="";
-	echo "<option $sel value=\"$r->id\">".htmlspecialchars(i18n($r->division))."</option>\n";
-	
- }
- echo "</select>".REQUIREDFIELD;
- if($config['usedivisionselector']=="yes")
- {
- ?>
- 	<script language="javascript" type="text/javascript">
-
-	function openDivSelWindow()
-	{
-		divselwin=window.open('register_participants_project_divisionselector.php','divsel','width=500,height=220,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no')
-		if(divselwin.opener==null) divselwin.opener=self;
-		return false;
+	if(!$projectinfo) {
+		echo error(i18n("Invalid project to edit"));
+		exit;
 	}
-	</script>
+
+?>
+	<form id="project_form">
+	<input type="hidden" name="id" value="<?=$projectinfo->id?>">
+	<table>
+	<tr>	<td><?=i18n("Project Title")?>: </td>
+		<td><input type="text" name="title" size="50" value="<?=htmlspecialchars($projectinfo->title)?>" /><?=REQUIREDFIELD?>
+<?
+	if($config['participant_project_title_charmax'])
+		echo i18n("(Max %1 characters)",array($config['participant_project_title_charmax']));
+?>
+		</td>
+	</tr><tr>
+		<td><?=i18n("Project Number")?>: </td>
+		<td><input type="text" name="projectnumber" size="10" value="<?=$projectinfo->projectnumber?>" />
+			<input type="button" id="project_regenerate_number" value="<?=i18n("Re-Generate Project Number")?>" />
+		</td>
+	</tr><tr>
+		<td><?=i18n("Project Sort")?>: </td>
+		<td><input type="text" name="projectsort" size="10" value="<?=$projectinfo->projectsort?>" /></td>
+	</tr><tr>
+		<td><?=i18n("Age Category")?>: </td>
+		<td><?=i18n($agecategories[$projectcategories_id]['category'])?> (<?=i18n("Grades %1-%2",array($agecategories[$projectcategories_id]['mingrade'],$agecategories[$projectcategories_id]['maxgrade']))?>)</td>
+	</tr><tr>
+		<td><?=i18n("Division")?>: </td>
+		<td>
+<?
+	//###### Feature Specific - filtering divisions by category
+	if($config['filterdivisionbycategory']=="yes"){
+		$q=mysql_query("SELECT projectdivisions.* FROM projectdivisions,projectcategoriesdivisions_link WHERE projectdivisions.id=projectdivisions_id AND projectcategories_id=".$projectcategories_id." AND projectdivisions.year='".$config['FAIRYEAR']."' AND projectcategoriesdivisions_link.year='".$config['FAIRYEAR']."' ORDER BY division"); 
+		echo mysql_error();
+	//###
+	} else
+		$q=mysql_query("SELECT * FROM projectdivisions WHERE year='".$config['FAIRYEAR']."' ORDER BY division");
+
+	echo "<select name=\"projectdivisions_id\">";
+	echo "<option value=\"\">".i18n("Select a division")."</option>\n";
+	while($r=mysql_fetch_object($q)) {
+		if($r->id == $projectinfo->projectdivisions_id) $sel="selected=\"selected\""; else $sel="";
+		echo "<option $sel value=\"$r->id\">".htmlspecialchars(i18n($r->division))."</option>\n";
+	}
+	echo "</select>".REQUIREDFIELD;
+
+	if($config['usedivisionselector']=="yes") {
+	 ?>
+		<script language="javascript" type="text/javascript">
+
+		function openDivSelWindow()
+		{
+			divselwin=window.open('register_participants_project_divisionselector.php','divsel','width=500,height=220,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no')
+			if(divselwin.opener==null) divselwin.opener=self;
+			return false;
+		}
+		</script>
 	<?
- }
- echo "<br />";
- echo i18n("WARNING!  If you change the division you must manually change the project number too!  It will NOT be assigned a new number automatically");
- echo "</td></tr>";
+	}
 
- echo "<tr><td>".i18n("Language").": </td><td>";
- echo "<select name=\"language\">\n";
+	echo "<br />";
+	echo i18n("WARNING!  If you change the division you must manually change the project number too!  It will NOT be assigned a new number automatically");
+	echo "</td></tr>";
 
- if($projectinfo->language)
- 	$currentlang=$projectinfo->language;
- else
-	$currentlang=$_SESSION['lang'];
+	echo "<tr><td>".i18n("Language").": </td><td>";
+	echo "<select name=\"language\">\n";
 
- foreach($config['languages'] AS $key=>$val)
- { 
-	if($currentlang==$key) $selected="selected=\"selected\""; else $selected="";
+	if($projectinfo->language)
+		$currentlang=$projectinfo->language;
+	else
+		$currentlang=$_SESSION['lang'];
 
-	echo "<option $selected value=\"$key\">$val</option>";
- }
- echo "</select>".REQUIREDFIELD;
- echo "</td></tr>";
+	foreach($config['languages'] AS $key=>$val) { 
+		if($currentlang==$key) $selected="selected=\"selected\""; else $selected="";
 
- echo "<tr><td>".i18n("Requirements").": </td><td>";
+		echo "<option $selected value=\"$key\">$val</option>";
+	}
+	echo "</select>".REQUIREDFIELD;
+	echo "</td></tr>";
+
+	echo "<tr><td>".i18n("Requirements").": </td><td>";
 	echo "<table>";
 
-	if($config['participant_project_table']=="no")
-	{
+	if($config['participant_project_table']=="no") {
 		//if we arent asking them if they want a table or not, then we set it to 'yes' assuming everyone will get a table
 		echo " <input type=\"hidden\" name=\"req_table\" value=\"yes\" />";
-	}
-	else
-	{
+	} else {
 		echo "<tr>";
 		echo " <td>".i18n("Table").REQUIREDFIELD."</td>";
 		if($projectinfo->req_table=="yes") $check="checked=\"checked\""; else $check="";
@@ -287,43 +295,26 @@ if($projectinfo)
 
 	echo "</table>";
 
- echo "</td></tr>";
+	echo "</td></tr>";
 
- echo "<tr><td>".i18n("Summary").": </td><td><textarea onchange='countwords()' onkeypress='countwords()' cols=\"60\" rows=\"12\" id=\"summary\" name=\"summary\">".htmlspecialchars($projectinfo->summary)."</textarea>".REQUIREDFIELD."<br />";
+	echo "<tr><td>".i18n("Summary").": </td><td><textarea onchange='countwords()' onkeypress='countwords()' cols=\"60\" rows=\"12\" id=\"summary\" name=\"summary\">".htmlspecialchars($projectinfo->summary)."</textarea>".REQUIREDFIELD."<br />";
 
- $summarywords=preg_split("/[\s,]+/",$projectinfo->summary);
- $summarywordcount=count($summarywords);
- if($summarywordcount>$config['participant_project_summary_wordmax'])
-	 echo "<div id=\"wordcountmessage\" class=\"incomplete\">";
- else
-	 echo "<div id=\"wordcountmessage\" class=\"complete\">";
+	$summarywords=preg_split("/[\s,]+/",$projectinfo->summary);
+	$summarywordcount=count($summarywords);
+	if($summarywordcount>$config['participant_project_summary_wordmax'])
+		echo "<div id=\"wordcountmessage\" class=\"incomplete\">";
+	else
+		echo "<div id=\"wordcountmessage\" class=\"complete\">";
 
- echo "<span id=\"wordcount\">$summarywordcount</span>/";
- echo i18n("%1 words maximum",array($config['participant_project_summary_wordmax']));
- echo "</div>";
+	echo "<span id=\"wordcount\">$summarywordcount</span>/";
+	echo i18n("%1 words maximum",array($config['participant_project_summary_wordmax']));
+	echo "</div>";
 
- echo "</td></tr>";
-
- echo "</table>";
- echo "<input type=\"submit\" value=\"".i18n("Save Project Information")."\" />\n";
- echo "</form>";
-
-
- echo ("<br /><br /><h3>".i18n("Other Actions")."</h3><br />");
-
- echo "<form name=\"projectform\" method=\"post\" action=\"project_editor.php\">\n";
- echo "<input type=\"hidden\" name=\"action\" value=\"genprojnum\">\n";
- echo "<input type=\"hidden\" name=\"id\" value=\"$projectinfo->id\">\n";
- echo "<input type=\"hidden\" name=\"registration_id\" value=\"$registration_id\">\n";
- echo "<input type=\"submit\" value=\"".i18n("Re-Generate Project Number")."\" />\n";
- echo "</form>";
- 
-}
-else
-{
-	echo error(i18n("Invalid project to edit"));
-
-}
-
- send_footer();
+?>
+	</td></tr>
+	</table>
+	<input type="button" id="project_save" value="<?=i18n("Save Project Information")?>" />
+	</form>
+<?
+}
 ?>