diff --git a/components/options.php b/components/options.php
index ebbfb8c7eb4debd9ac65bc7173960c5446471c9c..2462dd48d8522426389cbe3741058c9aa8c3cec5 100644
--- a/components/options.php
+++ b/components/options.php
@@ -2,6 +2,7 @@
 
 // e-mail, password validation functions
 require_once("../lib/validation.php");
+include_once("../lib/date.php");
 
 
 // Some Constants
@@ -13,6 +14,8 @@ $sucsdbname = 'sucs'; // This was stored in config, I just don't have it here in
 // Helper Functions
 // Could these be moved to some kind of library?
 
+// Set next payment date
+$paydate = "Sept. ".(academicYear(time())+1);
 
 // function to change a user's password
 function changePassword ($oldpass, $newpass1, $newpass2) {
@@ -166,6 +169,37 @@ function updateHackergotchi($fileDetails) {
 	return FALSE;
 }
 
+function updateRenew() {
+	global $sucsDB, $session, $error;
+	global $paydate;
+
+	if (!isset($_REQUEST['userid']) || !isset($_REQUEST['supass'])) {
+		trigger_error("Invalid renewal info", E_USER_ERROR);
+		return FALSE;
+	}
+	$userid = (int)$_REQUEST['userid'];
+	$pass = $_REQUEST['supass'];
+	$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='".$session->username."'");
+
+	$signup = $sucsDB->GetRow("select * from signup where id=?", array($userid));
+	if (!is_array($signup) || count($signup) < 1) {
+		trigger_error("Invalid renewal info", E_USER_ERROR);
+		return FALSE;
+	}
+	if ($signup['password'] != $pass) {
+		trigger_error("Invalid renewal info", E_USER_ERROR);
+		return FALSE;
+	}
+	if ($signup['activated'] != NULL) {
+		trigger_error("Signup slip already used", E_USER_ERROR);
+		return FALSE;
+	}
+
+	$sucsDB->Execute("update members set paid=?, lastupdate=DEFAULT, lastedit=uid where uid=?", array($paydate, $member['uid']));
+	$sucsDB->Execute("update signup set activated=NOW(), username=? where id=?", array($member['username'], $signup['id']));
+	return TRUE;
+}
+
 // Template Setup
 
 $smarty->assign('session', $session);
@@ -209,6 +243,11 @@ if ($session->loggedin === TRUE) {
 					message_flash('Hackergotchi Cleared');
 				}
 				break;
+			case 'renew' :
+				if (updateRenew()) {
+					message_flash('Account renewed');
+				}
+				break;
 		}
 	}
 
@@ -220,8 +259,9 @@ if ($session->loggedin === TRUE) {
 	if (is_file($base."htdocs/pictures/people/".$session->username.".png")) $smarty->assign('hackergotchi', TRUE);
 
 
-	$member = $sucsDB->GetRow("select * from members where username='".$session->username."'");
+	$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='".$session->username."'");
 	$smarty->assign('member', $member);
+	$smarty->assign('paydate', $paydate);
 
 	if(($currentGuestNetMAC = $sucsDB->GetOne('SELECT * FROM guestnet WHERE uid=?', array((int)$member['uid']))) !== FALSE) {
 		$smarty->assign('currentGuestNetMAC', $currentGuestNetMAC);