diff -urN punbb-1.2/upload/admin_bans.php punbb-1.2.5/upload/admin_bans.php
--- punbb-1.2/upload/admin_bans.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_bans.php	Tue Feb  1 17:16:46 2005
@@ -140,7 +140,7 @@
 									</td>
 								</tr>
 							</table>
-							<p class="topspace"><strong class="showhot">You should be very careful when banning an IP-range because of the possibility of multiple users matching the same partial IP.</strong></p>
+							<p class="topspace"><strong class="warntext">You should be very careful when banning an IP-range because of the possibility of multiple users matching the same partial IP.</strong></p>
 						</div>
 					</fieldset>
 				</div>
diff -urN punbb-1.2/upload/admin_categories.php punbb-1.2.5/upload/admin_categories.php
--- punbb-1.2/upload/admin_categories.php	Sun Jan  2 23:47:10 2005
+++ punbb-1.2.5/upload/admin_categories.php	Sun Apr  3 20:48:30 2005
@@ -123,7 +123,7 @@
 						</div>
 					</fieldset>
 				</div>
-				<p><input type="submit" name="del_cat_comply" value="Delete" />&nbsp;&nbsp;&nbsp;<a href="javascript:history.go(-1)" />Go back</a></p>
+				<p><input type="submit" name="del_cat_comply" value="Delete" /><a href="javascript:history.go(-1)">Go back</a></p>
 			</form>
 		</div>
 	</div>
diff -urN punbb-1.2/upload/admin_censoring.php punbb-1.2.5/upload/admin_censoring.php
--- punbb-1.2/upload/admin_censoring.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_censoring.php	Thu Apr  7 21:38:22 2005
@@ -57,7 +57,7 @@
 {
 	confirm_referrer('admin_censoring.php');
 
-	$id = key($_POST['update']);
+	$id = intval(key($_POST['update']));
 
 	$search_for = trim($_POST['search_for'][$id]);
 	$replace_with = trim($_POST['replace_with'][$id]);
@@ -76,7 +76,7 @@
 {
 	confirm_referrer('admin_censoring.php');
 
-	$id = key($_POST['remove']);
+	$id = intval(key($_POST['remove']));
 
 	$db->query('DELETE FROM '.$db->prefix.'censoring WHERE id='.$id) or error('Unable to delete censor word', __FILE__, __LINE__, $db->error());
 
diff -urN punbb-1.2/upload/admin_forums.php punbb-1.2.5/upload/admin_forums.php
--- punbb-1.2/upload/admin_forums.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_forums.php	Sun Apr  3 20:48:30 2005
@@ -117,7 +117,7 @@
 						</div>
 					</fieldset>
 				</div>
-				<p><input type="submit" name="del_forum_comply" value="Delete" />&nbsp;&nbsp;&nbsp;<a href="javascript:history.go(-1)" />Go back</a></p>
+				<p><input type="submit" name="del_forum_comply" value="Delete" /><a href="javascript:history.go(-1)">Go back</a></p>
 			</form>
 		</div>
 	</div>
@@ -229,6 +229,9 @@
 
 	// Fetch forum info
 	$result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
+	if (!$db->num_rows($result))
+		message($lang_common['Bad request']);
+
 	$cur_forum = $db->fetch_assoc($result);
 
 
diff -urN punbb-1.2/upload/admin_groups.php punbb-1.2.5/upload/admin_groups.php
--- punbb-1.2/upload/admin_groups.php	Sat Jan  1 16:49:06 2005
+++ punbb-1.2.5/upload/admin_groups.php	Tue Apr  5 01:06:00 2005
@@ -54,6 +54,9 @@
 			message($lang_common['Bad request']);
 
 		$result = $db->query('SELECT * FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to fetch user group info', __FILE__, __LINE__, $db->error());
+		if (!$db->num_rows($result))
+			message($lang_common['Bad request']);
+
 		$group = $db->fetch_assoc($result);
 
 		$mode = 'edit';
@@ -180,7 +183,7 @@
 									</td>
 								</tr>
 <?php endif; ?><?php endif; ?>							</table>
-<?php if ($group['g_id'] == PUN_MOD ): ?>							<p class="showhot">Please note that in order for a user in this group to have moderator abilities, he/she must be assigned to moderate one or more forums. This is done via the user administration page of the user's profile.</p>
+<?php if ($group['g_id'] == PUN_MOD ): ?>							<p class="warntext">Please note that in order for a user in this group to have moderator abilities, he/she must be assigned to moderate one or more forums. This is done via the user administration page of the user's profile.</p>
 <?php endif; ?>						</div>
 					</fieldset>
 				</div>
@@ -226,8 +229,8 @@
 
 	if ($_POST['mode'] == 'add')
 	{
-		$db->query('SELECT 1 FROM '.$db->prefix.'groups WHERE g_title=\''.$db->escape($title).'\'') or error('Unable to check group title collision', __FILE__, __LINE__, $db->error());
-		if ($db->num_rows())
+		$result = $db->query('SELECT 1 FROM '.$db->prefix.'groups WHERE g_title=\''.$db->escape($title).'\'') or error('Unable to check group title collision', __FILE__, __LINE__, $db->error());
+		if ($db->num_rows($result))
 			message('There is already a group with the title \''.pun_htmlspecialchars($title).'\'.');
 
 		$db->query('INSERT INTO '.$db->prefix.'groups (g_title, g_user_title, g_read_board, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_edit_subjects_interval, g_post_flood, g_search_flood) VALUES(\''.$db->escape($title).'\', '.$user_title.', '.$read_board.', '.$post_replies.', '.$post_topics.', '.$edit_posts.', '.$delete_posts.', '.$delete_topics.', '.$set_title.', '.$search.', '.$search_users.', '.$edit_subjects_interval.', '.$post_flood.', '.$search_flood.')') or error('Unable to add group', __FILE__, __LINE__, $db->error());
@@ -239,7 +242,13 @@
 			$db->query('INSERT INTO '.$db->prefix.'forum_perms (group_id, forum_id, read_forum, post_replies, post_topics) VALUES('.$new_group_id.', '.$cur_forum_perm['forum_id'].', '.$cur_forum_perm['read_forum'].', '.$cur_forum_perm['post_replies'].', '.$cur_forum_perm['post_topics'].')') or error('Unable to insert group forum permissions', __FILE__, __LINE__, $db->error());
 	}
 	else
+	{
+		$result = $db->query('SELECT 1 FROM '.$db->prefix.'groups WHERE g_title=\''.$db->escape($title).'\' AND g_id!='.$_POST['group_id']) or error('Unable to check group title collision', __FILE__, __LINE__, $db->error());
+		if ($db->num_rows($result))
+			message('There is already a group with the title \''.pun_htmlspecialchars($title).'\'.');
+
 		$db->query('UPDATE '.$db->prefix.'groups SET g_title=\''.$db->escape($title).'\', g_user_title='.$user_title.', g_read_board='.$read_board.', g_post_replies='.$post_replies.', g_post_topics='.$post_topics.', g_edit_posts='.$edit_posts.', g_delete_posts='.$delete_posts.', g_delete_topics='.$delete_topics.', g_set_title='.$set_title.', g_search='.$search.', g_search_users='.$search_users.', g_edit_subjects_interval='.$edit_subjects_interval.', g_post_flood='.$post_flood.', g_search_flood='.$search_flood.' WHERE g_id='.$_POST['group_id']) or error('Unable to update group', __FILE__, __LINE__, $db->error());
+	}
 
 	// Regenerate the quickjump cache
 	require_once PUN_ROOT.'include/cache.php';
diff -urN punbb-1.2/upload/admin_index.php punbb-1.2.5/upload/admin_index.php
--- punbb-1.2/upload/admin_index.php	Fri Dec 31 15:42:04 2004
+++ punbb-1.2.5/upload/admin_index.php	Sun Mar 20 20:13:24 2005
@@ -64,15 +64,19 @@
 
 
 // Show phpinfo() output
-else if ($action == 'phpinfo')
+else if ($action == 'phpinfo' && $pun_user['g_id'] == PUN_ADMIN)
 {
+	// Is phpinfo() a disabled function?
+	if (strpos(strtolower((string)@ini_get('disable_functions')), 'phpinfo') !== false)
+		message('The PHP function phpinfo() has been disabled on this server.');
+
 	phpinfo();
 	exit;
 }
 
 
 // Get the server load averages (if possible)
-if (@file_exists('/proc/loadavg'))
+if (@file_exists('/proc/loadavg') && is_readable('/proc/loadavg'))
 {
 	// We use @ just in case
 	$fh = @fopen('/proc/loadavg', 'r');
@@ -80,7 +84,7 @@
 	@fclose($fh);
 
 	$load_averages = @explode(' ', $load_averages);
-	$server_load = isset($load_averages[0]) ? $load_averages[0].' '.$load_averages[1].' '.$load_averages[2] : 'Not available';
+	$server_load = isset($load_averages[2]) ? $load_averages[0].' '.$load_averages[1].' '.$load_averages[2] : 'Not available';
 }
 else if (preg_match('/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/i', @exec('uptime'), $load_averages))
 	$server_load = $load_averages[1].' '.$load_averages[2].' '.$load_averages[3];
@@ -89,7 +93,7 @@
 
 
 // Get number of current visitors
-$result = $db->query('SELECT COUNT(user_id) FROM '.$db->prefix.'online') or error('Unable to fetch online count', __FILE__, __LINE__, $db->error());
+$result = $db->query('SELECT COUNT(user_id) FROM '.$db->prefix.'online WHERE idle=0') or error('Unable to fetch online count', __FILE__, __LINE__, $db->error());
 $num_online = $db->result($result);
 
 
diff -urN punbb-1.2/upload/admin_loader.php punbb-1.2.5/upload/admin_loader.php
--- punbb-1.2/upload/admin_loader.php	Sat Jan  8 01:47:50 2005
+++ punbb-1.2.5/upload/admin_loader.php	Thu Feb 24 23:15:54 2005
@@ -36,8 +36,8 @@
 
 
 // The plugin to load should be supplied via GET
-$plugin = isset($_GET['plugin']) ? $_GET['plugin'] : null;
-if (!$plugin)
+$plugin = isset($_GET['plugin']) ? $_GET['plugin'] : '';
+if (!preg_match('/^AM?P_(\w*?)\.php$/i', $plugin))
 	message($lang_common['Bad request']);
 
 // AP_ == Admins only, AMP_ == admins and moderators
@@ -49,6 +49,9 @@
 if (!file_exists(PUN_ROOT.'plugins/'.$plugin))
 	message('There is no plugin called \''.$plugin.'\' in the plugin directory.');
 
+// Construct REQUEST_URI if it isn't set
+if (!isset($_SERVER['REQUEST_URI']))
+	$_SERVER['REQUEST_URI'] = (isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '').'?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '');
 
 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / '.$plugin;
 require PUN_ROOT.'header.php';
diff -urN punbb-1.2/upload/admin_maintenance.php punbb-1.2.5/upload/admin_maintenance.php
--- punbb-1.2/upload/admin_maintenance.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_maintenance.php	Sun Jan 30 13:58:04 2005
@@ -60,6 +60,7 @@
 		switch ($db_type)
 		{
 			case 'mysql':
+			case 'mysqli':
 				$result = $db->query('ALTER TABLE '.$db->prefix.'search_words auto_increment=1') or error('Unable to update table auto_increment', __FILE__, __LINE__, $db->error());
 				break;
 
@@ -147,7 +148,7 @@
 					<fieldset>
 						<legend>Rebuild search index</legend>
 						<div class="infldset">
-							<p>If you've added, edited or removed posts manually in the database or if you've switched language packs while there were posts in the database, you should rebuild the search index (to remove stopwords). For best performance you should put the forum in maintenance mode during rebuilding. <strong>Rebuilding the search index can take a long time and will increase server load during the rebuild process!</strong></p>
+							<p>If you've added, edited or removed posts manually in the database or if you're having problems searching, you should rebuild the search index. For best performance you should put the forum in maintenance mode during rebuilding. <strong>Rebuilding the search index can take a long time and will increase server load during the rebuild process!</strong></p>
 							<table class="aligntop" cellspacing="0">
 								<tr>
 									<th scope="row">Topics per cycle</th>
diff -urN punbb-1.2/upload/admin_options.php punbb-1.2.5/upload/admin_options.php
--- punbb-1.2/upload/admin_options.php	Sat Jan  1 17:06:44 2005
+++ punbb-1.2.5/upload/admin_options.php	Mon Feb 28 02:52:52 2005
@@ -38,7 +38,7 @@
 if (isset($_POST['form_sent']))
 {
 	// Lazy referer check (in case base_url isn't correct)
-	if (!preg_match('#/admin_options\.php#i', $_SERVER['HTTP_REFERER']))
+	if (!isset($_SERVER['HTTP_REFERER']) || !preg_match('#/admin_options\.php#i', $_SERVER['HTTP_REFERER']))
 		message($lang_common['Bad referrer']);
 
 	$form = array_map('trim', $_POST['form']);
@@ -67,6 +67,9 @@
 	if (substr($form['avatars_dir'], -1) == '/')
 		$form['avatars_dir'] = substr($form['avatars_dir'], 0, -1);
 
+	if ($form['additional_navlinks'] != '')
+		$form['additional_navlinks'] = trim(pun_linebreaks($form['additional_navlinks']));
+
 	if ($form['announcement_message'] != '')
 		$form['announcement_message'] = pun_linebreaks($form['announcement_message']);
 	else
@@ -166,6 +169,13 @@
 									</td>
 								</tr>
 								<tr>
+									<th scope="row">Base URL</th>
+									<td>
+										<input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url'] ?>" />
+										<span>The complete URL of the forum without trailing slash (i.e. http://www.mydomain.com/forums). This <strong>must</strong> be correct in order for all admin and moderator features to work. If you get "Bad referer" errors, it's probably incorrect.</span>
+									</td>
+								</tr>
+								<tr>
 									<th scope="row">Server timezone</th>
 									<td>
 										<select name="form[server_timezone]">
@@ -264,13 +274,6 @@
 										</select>
 										<span>This is the default style used for guests and users who haven't changed from the default in their profile.</span></td>
 								</tr>
-								<tr>
-									<th scope="row">Base URL</th>
-									<td>
-										<input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url'] ?>" />
-										<span>The complete URL of the forum without trailing slash (i.e. http://www.mydomain.com/forums). This <strong>must</strong> be correct in order for all admin and moderator features to work. If you get "Bad referer" errors, it's probably incorrect.</span>
-									</td>
-								</tr>
 							</table>
 						</div>
 					</fieldset>
@@ -457,6 +460,13 @@
 									<td>
 										<input type="radio" name="form[search_all_forums]" value="1"<?php if ($pun_config['o_search_all_forums'] == '1') echo ' checked="checked"' ?> />&nbsp;<strong>Yes</strong>&nbsp;&nbsp;&nbsp;<input type="radio" name="form[search_all_forums]" value="0"<?php if ($pun_config['o_search_all_forums'] == '0') echo ' checked="checked"' ?> />&nbsp;<strong>No</strong>
 										<span>When disabled, searches will only be allowed in one forum at a time. Disable if server load is high due to excessive searching.</span>
+									</td>
+								</tr>
+								<tr>
+									<th scope="row">Additional menu items</th>
+									<td>
+										<textarea name="form[additional_navlinks]" rows="3" cols="55"><?php echo pun_htmlspecialchars($pun_config['o_additional_navlinks']) ?></textarea>
+										<span>By entering HTML hyperlinks into this textbox, any number of items can be added to the navigation menu at the top of all pages. The format for adding new links is X = &lt;a href="URL"&gt;LINK&lt;/a&gt; where X is the position at which the link should be inserted (e.g. 0 to insert at the beginning and 2 to insert after "User list"). Separate entries with a linebreak.</span>
 									</td>
 								</tr>
 							</table>
diff -urN punbb-1.2/upload/admin_prune.php punbb-1.2.5/upload/admin_prune.php
--- punbb-1.2/upload/admin_prune.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_prune.php	Sun Apr  3 20:48:30 2005
@@ -135,7 +135,7 @@
 						</div>
 					</fieldset>
 				</div>
-				<p><input type="submit" name="prune_comply" value="Prune" />&nbsp;&nbsp;&nbsp;<a href="javascript:history.go(-1)" />Go back</a></p>
+				<p><input type="submit" name="prune_comply" value="Prune" /><a href="javascript:history.go(-1)">Go back</a></p>
 			</form>
 		</div>
 	</div>
diff -urN punbb-1.2/upload/admin_ranks.php punbb-1.2.5/upload/admin_ranks.php
--- punbb-1.2/upload/admin_ranks.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_ranks.php	Fri Mar 11 20:17:26 2005
@@ -69,7 +69,7 @@
 {
 	confirm_referrer('admin_ranks.php');
 
-	$id = key($_POST['update']);
+	$id = intval(key($_POST['update']));
 
 	$rank = trim($_POST['rank'][$id]);
 	$min_posts = trim($_POST['min_posts'][$id]);
@@ -100,7 +100,7 @@
 {
 	confirm_referrer('admin_ranks.php');
 
-	$id = key($_POST['remove']);
+	$id = intval(key($_POST['remove']));
 
 	$db->query('DELETE FROM '.$db->prefix.'ranks WHERE id='.$id) or error('Unable to delete rank', __FILE__, __LINE__, $db->error());
 
diff -urN punbb-1.2/upload/admin_reports.php punbb-1.2.5/upload/admin_reports.php
--- punbb-1.2/upload/admin_reports.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/admin_reports.php	Fri Mar 11 20:17:26 2005
@@ -40,7 +40,7 @@
 {
 	confirm_referrer('admin_reports.php');
 
-	$zap_id = key($_POST['zap_id']);
+	$zap_id = intval(key($_POST['zap_id']));
 
 	$result = $db->query('SELECT zapped FROM '.$db->prefix.'reports WHERE id='.$zap_id) or error('Unable to fetch report info', __FILE__, __LINE__, $db->error());
 	$zapped = $db->result($result);
diff -urN punbb-1.2/upload/admin_users.php punbb-1.2.5/upload/admin_users.php
--- punbb-1.2/upload/admin_users.php	Sun Jan  2 01:03:06 2005
+++ punbb-1.2.5/upload/admin_users.php	Sun Apr  3 20:48:30 2005
@@ -49,7 +49,7 @@
 ?>
 <div class="linkst">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 
@@ -98,7 +98,7 @@
 
 <div class="linksb">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 <?php
@@ -121,7 +121,7 @@
 ?>
 <div class="linkst">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 
@@ -202,7 +202,7 @@
 
 <div class="linksb">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 <?php
@@ -266,7 +266,7 @@
 		$conditions[] = 'u.num_posts<'.$posts_less;
 
 	if ($user_group != 'all')
-		$conditions[] = 'u.group_id='.$user_group;
+		$conditions[] = 'u.group_id='.$db->escape($user_group);
 
 	if (!isset($conditions))
 		message('You didn\'t enter any search terms.');
@@ -278,7 +278,7 @@
 ?>
 <div class="linkst">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 
@@ -300,7 +300,7 @@
 			<tbody>
 <?php
 
-	$result = $db->query('SELECT u.id, u.username, u.email, u.title, u.num_posts, u.admin_note, g.g_id, g.g_user_title FROM '.$db->prefix.'users AS u LEFT JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE u.id>1 AND '.implode(' AND ', $conditions).' ORDER BY '.$order_by.' '.$direction) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
+	$result = $db->query('SELECT u.id, u.username, u.email, u.title, u.num_posts, u.admin_note, g.g_id, g.g_user_title FROM '.$db->prefix.'users AS u LEFT JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE u.id>1 AND '.implode(' AND ', $conditions).' ORDER BY '.$db->escape($order_by).' '.$db->escape($direction)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 	if ($db->num_rows($result))
 	{
 		while ($user_data = $db->fetch_assoc($result))
@@ -309,7 +309,7 @@
 
 			// This script is a special case in that we want to display "Not verified" for non-verified users
 			if (($user_data['g_id'] == '' || $user_data['g_id'] == PUN_UNVERIFIED) && $user_title != $lang_common['Banned'])
-				$user_title = '<span class="showhot">Not verified</span>';
+				$user_title = '<span class="warntext">Not verified</span>';
 
 			$actions = '<a href="admin_users.php?ip_stats='.$user_data['id'].'">View IP stats</a> - <a href="search.php?action=show_user&amp;user_id='.$user_data['id'].'">Show posts</a>';
 
@@ -338,7 +338,7 @@
 
 <div class="linksb">
 	<div class="inbox">
-		<div><a href="javascript:history.go(-1)" />Go back</a></div>
+		<div><a href="javascript:history.go(-1)">Go back</a></div>
 	</div>
 </div>
 <?php
diff -urN punbb-1.2/upload/delete.php punbb-1.2.5/upload/delete.php
--- punbb-1.2/upload/delete.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/delete.php	Tue Feb  1 17:16:46 2005
@@ -109,7 +109,7 @@
 		<form method="post" action="delete.php?id=<?php echo $id ?>">
 			<div class="inform">
 				<fieldset>
-					<legend class="showhot"><?php echo $lang_delete['Warning'] ?></legend>
+					<legend class="warntext"><?php echo $lang_delete['Warning'] ?></legend>
 					<div class="infldset">
 						<div class="postmsg">
 							<p><?php echo $lang_common['Author'] ?>: <strong><?php echo pun_htmlspecialchars($cur_post['poster']) ?></strong></p>
diff -urN punbb-1.2/upload/footer.php punbb-1.2.5/upload/footer.php
--- punbb-1.2/upload/footer.php	Wed Jan  5 16:18:52 2005
+++ punbb-1.2.5/upload/footer.php	Wed Feb 23 00:31:02 2005
@@ -140,12 +140,12 @@
 
 
 // START SUBST - <pun_include "*">
-while (preg_match('<pun_include "(.*?)">', $tpl_main, $cur_include))
+while (preg_match('/<pun_include "(.*?)">/', $tpl_main, $cur_include))
 {
 	ob_start();
 	include PUN_ROOT.$cur_include[1];
 	$tpl_temp = ob_get_contents();
-	$tpl_main = str_replace('<'.$cur_include[0].'>', $tpl_temp, $tpl_main);
+	$tpl_main = str_replace($cur_include[0], $tpl_temp, $tpl_main);
     ob_end_clean();
 }
 // END SUBST - <pun_include "*">
diff -urN punbb-1.2/upload/header.php punbb-1.2.5/upload/header.php
--- punbb-1.2/upload/header.php	Wed Jan  5 16:17:50 2005
+++ punbb-1.2.5/upload/header.php	Wed Mar  9 23:04:02 2005
@@ -15,7 +15,7 @@
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
 
-  You should have received a copy of the GNU G>eneral Public License
+  You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston,
   MA  02111-1307  USA
@@ -114,6 +114,10 @@
 
 }
 
+$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';
+if (strpos($user_agent, 'msie') !== false && strpos($user_agent, 'windows') !== false && strpos($user_agent, 'opera') === false)
+	echo '<script type="text/javascript" src="style/imports/minmax.js"></script>';
+
 $tpl_temp = trim(ob_get_contents());
 $tpl_main = str_replace('<pun_head>', $tpl_temp, $tpl_main);
 ob_end_clean();
@@ -123,7 +127,7 @@
 // START SUBST - <body>
 if (isset($focus_element))
 {
-	$tpl_main = str_replace('<body onload="', '<body onload="document.getElementById(\''.$focus_element[0].'\').'.$focus_element[1].'.focus();', $tpl_main);
+	$tpl_main = str_replace('<body onload="', '<body onload="document.getElementById(\''.$focus_element[0].'\').'.$focus_element[1].'.focus();', $tpl_main);
 	$tpl_main = str_replace('<body>', '<body onload="document.getElementById(\''.$focus_element[0].'\').'.$focus_element[1].'.focus()">', $tpl_main);
 }
 // END SUBST - <body>
@@ -154,25 +158,23 @@
 	$tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<p>'.$lang_common['Not logged in'].'</p>'."\n\t\t".'</div>';
 else
 {
-	$tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<p class="conl">'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong><br />'.$lang_common['Last visit'].': '.format_time($pun_user['last_visit']);
+	$tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'."\n\t\t\t\t".'<li>'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong></li>'."\n\t\t\t\t".'<li>'.$lang_common['Last visit'].': '.format_time($pun_user['last_visit']).'</li>';
 
 	if ($pun_user['g_id'] < PUN_GUEST)
 	{
 		$result_header = $db->query('SELECT COUNT(id) FROM '.$db->prefix.'reports WHERE zapped IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error());
 
 		if ($db->result($result_header))
-			$tpl_temp .= '<br /><strong><a href="admin_reports.php">There are new reports</a></strong>';
+			$tpl_temp .= "\n\t\t\t\t".'<li class="reportlink"><strong><a href="admin_reports.php">There are new reports</a></strong></li>';
 
 		if ($pun_config['o_maintenance'] == '1')
-			$tpl_temp .= '<br /><strong><a class="showhot" href="admin_options.php#maintenance">Maintenance mode is enabled!</a></strong>';
+			$tpl_temp .= "\n\t\t\t\t".'<li class="maintenancelink"><strong><a href="admin_options.php#maintenance">Maintenance mode is enabled!</a></strong></li>';
 	}
 
-	if (basename($_SERVER['PHP_SELF']) == 'index.php')
-		$tpl_temp .= '</p>'."\n\t\t\t".'<p class="conr"><a href="search.php?action=show_new">'.$lang_common['Show new posts'].'</a><br /><a href="misc.php?action=markread">'.$lang_common['Mark all as read'].'</a></p>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
-	else if ($_SERVER['QUERY_STRING'] == 'action=show_new')
-		$tpl_temp .= '</p>'."\n\t\t\t".'<p class="conr"><a href="misc.php?action=markread">'.$lang_common['Mark all as read'].'</a></p>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
+	if (in_array(basename($_SERVER['PHP_SELF']), array('index.php', 'search.php')))
+		$tpl_temp .= "\n\t\t\t".'</ul>'."\n\t\t\t".'<ul class="conr">'."\n\t\t\t\t".'<li><a href="search.php?action=show_new">'.$lang_common['Show new posts'].'</a></li>'."\n\t\t\t\t".'<li><a href="misc.php?action=markread">'.$lang_common['Mark all as read'].'</a></li>'."\n\t\t\t".'</ul>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
 	else
-		$tpl_temp .= '</p>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
+		$tpl_temp .= "\n\t\t\t".'</ul>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
 }
 
 $tpl_main = str_replace('<pun_status>', $tpl_temp, $tpl_main);
diff -urN punbb-1.2/upload/help.php punbb-1.2.5/upload/help.php
--- punbb-1.2/upload/help.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/help.php	Fri Mar 18 23:20:44 2005
@@ -37,12 +37,6 @@
 // Load the help.php language file
 require PUN_ROOT.'lang/'.$pun_user['language'].'/help.php';
 
-// Determine what style to use (for the [img] example)
-if ($pun_user['style'] != '' && @file_exists(PUN_ROOT.'style/'.$pun_user['style'].'.css'))
-	$img_url = $pun_config['o_base_url'].'/img/'.$pun_user['style'].'_new.png';
-else
-	$img_url = $pun_config['o_base_url'].'/img/'.$pun_config['o_default_style'].'_new.png';
-
 
 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_help['Help'];
 require PUN_ROOT.'header.php';
@@ -76,7 +70,7 @@
 		[email=myname@mydomain.com]<?php echo $lang_help['My e-mail address'] ?>[/email] <?php echo $lang_help['produces'] ?> <a href="mailto:myname@mydomain.com"><?php echo $lang_help['My e-mail address'] ?></a><br /><br />
 	</div>
 	<p><a name="img"></a><?php echo $lang_help['Images info'] ?></p>
-	<div>[img]<?php echo $img_url ?>[/img] <?php echo $lang_help['produces'] ?> <img src="<?php echo $img_url ?>"   alt="" /></div>
+	<div>[img]http://www.punbb.org/img/small_logo.png[/img] <?php echo $lang_help['produces'] ?> <img src="http://www.punbb.org/img/small_logo.png" alt="http://www.punbb.org/img/small_logo.png" /></div>
 </div>
 <h2><?php echo $lang_help['Quotes'] ?></h2>
 <div class="box">
@@ -92,7 +86,7 @@
 		&nbsp;&nbsp;&nbsp;&nbsp;[quote]<?php echo $lang_help['Quote text'] ?>[/quote]<br /><br />
 		<?php echo $lang_help['produces quote box'] ?><br /><br />
 		<div class="postmsg">
-			<blockquote><div class="incqbox"></h4><p><?php echo $lang_help['Quote text'] ?></p></div></blockquote>
+			<blockquote><div class="incqbox"><p><?php echo $lang_help['Quote text'] ?></p></div></blockquote>
 		</div>
 	</div>
 </div>
@@ -141,7 +135,7 @@
 	for ($next = $i + 1; $next < $num_smilies; ++$next)
 	{
 		// Did we find a dupe?
-		if ($smiley_img[$i] == $smiley_img[$next])
+		if (isset($smiley_img[$next]) && $smiley_img[$i] == $smiley_img[$next])
 		{
 			echo ' '.$lang_common['and'].' '.$smiley_text[$next];
 
diff -urN punbb-1.2/upload/include/cache.php punbb-1.2.5/upload/include/cache.php
--- punbb-1.2/upload/include/cache.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/include/cache.php	Sun Jan 30 19:40:38 2005
@@ -135,7 +135,7 @@
 	while ($cur_rank = $db->fetch_assoc($result))
 		$output[] = $cur_rank;
 
-	// Output ban list as PHP code
+	// Output ranks list as PHP code
 	$fh = @fopen(PUN_ROOT.'cache/cache_ranks.php', 'wb');
 	if (!$fh)
 		error('Unable to write ranks cache file to cache directory. Please make sure PHP has write access to the directory \'cache\'', __FILE__, __LINE__);
diff -urN punbb-1.2/upload/include/dblayer/common_db.php punbb-1.2.5/upload/include/dblayer/common_db.php
--- punbb-1.2/upload/include/dblayer/common_db.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/include/dblayer/common_db.php	Fri Mar 18 23:07:48 2005
@@ -23,6 +23,11 @@
 ************************************************************************/
 
 
+// Make sure no one attempts to run this script "directly"
+if (!defined('PUN'))
+	exit;
+
+
 //
 // Return current timestamp (with microseconds) as a float (used in dblayer)
 //
diff -urN punbb-1.2/upload/include/dblayer/pgsql.php punbb-1.2.5/upload/include/dblayer/pgsql.php
--- punbb-1.2/upload/include/dblayer/pgsql.php	Sun Jan  2 16:48:12 2005
+++ punbb-1.2.5/upload/include/dblayer/pgsql.php	Fri Jan 28 23:16:44 2005
@@ -167,9 +167,9 @@
 	}
 
 
-	function affected_rows($query_id = 0)
+	function affected_rows()
 	{
-		return ($query_id) ? @pg_affected_rows($query_id) : false;
+		return ($this->query_result) ? @pg_affected_rows($this->query_result) : false;
 	}
 
 
diff -urN punbb-1.2/upload/include/dblayer/sqlite.php punbb-1.2.5/upload/include/dblayer/sqlite.php
--- punbb-1.2/upload/include/dblayer/sqlite.php	Sun Jan  2 16:48:24 2005
+++ punbb-1.2.5/upload/include/dblayer/sqlite.php	Fri Jan 28 23:16:44 2005
@@ -187,9 +187,9 @@
 	}
 
 
-	function affected_rows($query_id = 0)
+	function affected_rows()
 	{
-		return ($query_id) ? @sqlite_changes($query_id) : false;
+		return ($this->query_result) ? @sqlite_changes($this->query_result) : false;
 	}
 
 
diff -urN punbb-1.2/upload/include/email.php punbb-1.2.5/upload/include/email.php
--- punbb-1.2/upload/include/email.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/include/email.php	Thu Apr  7 21:41:16 2005
@@ -33,7 +33,10 @@
 //
 function is_valid_email($email)
 {
-	return preg_match('#^.{1,}@.{2,}\..{2,}$#', $email);
+	if (strlen($email) > 50)
+		return false;
+
+	return preg_match('/^(([^<>()[\]\\.,;:\s@"\']+(\.[^<>()[\]\\.,;:\s@"\']+)*)|("[^"\']+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/', $email);
 }
 
 
@@ -65,18 +68,20 @@
 
 	// Default sender/return address
 	if (!$from)
-		$from = $pun_config['o_board_title'].' '.$lang_common['Mailer'].' <'.$pun_config['o_webmaster_email'].'>';
+		$from = '"'.str_replace('"', '', $pun_config['o_board_title'].' '.$lang_common['Mailer']).'" <'.$pun_config['o_webmaster_email'].'>';
 
-	// Make sure the from line doesn't contain a colon (the character, that is :D)
-	$from = str_replace(':', ' ', $from);
+	// Do a little spring cleaning
+	$to = trim(preg_replace('#[\n\r]+#s', '', $to));
+	$subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
+	$from = trim(preg_replace('#[\n\r:]+#s', '', $from));
 
 	// Detect what linebreak we should use for the headers
-	if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
-		$eol = "\r\n";
-	else if (strtoupper(substr(PHP_OS, 0, 3) == 'MAC'))
-		$eol = "\r";
-	else
-		$eol = "\n";
+	if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
+		$eol = "\r\n";
+	else if (strtoupper(substr(PHP_OS, 0, 3) == 'MAC'))
+		$eol = "\r";
+	else
+		$eol = "\n";
 
 	$headers = 'From: '.$from.$eol.'Date: '.date('r').$eol.'MIME-Version: 1.0'.$eol.'Content-transfer-encoding: 8bit'.$eol.'Content-type: text/plain; charset='.$lang_common['lang_encoding'].$eol.'X-Mailer: PunBB Mailer';
 
diff -urN punbb-1.2/upload/include/functions.php punbb-1.2.5/upload/include/functions.php
--- punbb-1.2/upload/include/functions.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/include/functions.php	Fri Mar 18 23:10:18 2005
@@ -46,7 +46,7 @@
 		$pun_user = $db->fetch_assoc($result);
 
 		// If user authorisation failed
-		if (!isset($pun_user['id']) || md5($cookie_seed.$pun_user['password']) != $cookie['password_hash'])
+		if (!isset($pun_user['id']) || md5($cookie_seed.$pun_user['password']) !== $cookie['password_hash'])
 		{
 			pun_setcookie(0, random_pass(8), $expire);
 			set_default_user();
@@ -108,6 +108,9 @@
 
 	// Fetch guest user
 	$result = $db->query('SELECT u.*, g.*, o.logged FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$remote_addr.'\' WHERE u.id=1') or error('Unable to fetch guest information', __FILE__, __LINE__, $db->error());
+	if (!$db->num_rows($result))
+		exit('Unable to fetch guest information. The table \''.$db->prefix.'users\' must contain an entry with id = 1 that represents anonymous users.');
+
 	$pun_user = $db->fetch_assoc($result);
 
 	// Update online list
@@ -229,18 +232,19 @@
 	global $pun_config, $lang_common, $pun_user;
 
 	// Index and Userlist should always be displayed
-	$links[] = '<li><a href="index.php">'.$lang_common['Index'].'</a>';
-	$links[] = '<li><a href="userlist.php">'.$lang_common['User list'].'</a>';
+	$links[] = '<li id="navindex"><a href="index.php">'.$lang_common['Index'].'</a>';
+	$links[] = '<li id="navuserlist"><a href="userlist.php">'.$lang_common['User list'].'</a>';
 
 	if ($pun_config['o_rules'] == '1')
-		$links[] = '<li><a href="misc.php?action=rules">'.$lang_common['Rules'].'</a>';
+		$links[] = '<li id="navrules"><a href="misc.php?action=rules">'.$lang_common['Rules'].'</a>';
 
 	if ($pun_user['is_guest'])
 	{
 		if ($pun_user['g_search'] == '1')
-			$links[] = '<li><a href="search.php">'.$lang_common['Search'].'</a>';
+			$links[] = '<li id="navsearch"><a href="search.php">'.$lang_common['Search'].'</a>';
 
-		$links[] = '<li><a href="register.php">'.$lang_common['Register'].'</a>'.$lang_common['Link separator'].'</li><li><a href="login.php">'.$lang_common['Login'].'</a>';
+		$links[] = '<li id="navregister"><a href="register.php">'.$lang_common['Register'].'</a>';
+		$links[] = '<li id="navlogin"><a href="login.php">'.$lang_common['Login'].'</a>';
 
 		$info = $lang_common['Not logged in'];
 	}
@@ -249,21 +253,32 @@
 		if ($pun_user['g_id'] > PUN_MOD)
 		{
 			if ($pun_user['g_search'] == '1')
-				$links[] = '<li><a href="search.php">'.$lang_common['Search'].'</a>';
+				$links[] = '<li id="navsearch"><a href="search.php">'.$lang_common['Search'].'</a>';
 
-			$links[] = '<li><a href="profile.php?id='.$pun_user['id'].'">'.$lang_common['Profile'].'</a>';
-			$links[] = '<li><a href="login.php?action=out&amp;id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>';
+			$links[] = '<li id="navprofile"><a href="profile.php?id='.$pun_user['id'].'">'.$lang_common['Profile'].'</a>';
+			$links[] = '<li id="navlogout"><a href="login.php?action=out&amp;id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>';
 		}
 		else
 		{
-			$links[] = '<li><a href="search.php">'.$lang_common['Search'].'</a>';
-			$links[] = '<li><a href="profile.php?id='.$pun_user['id'].'">'.$lang_common['Profile'].'</a>';
-			$links[] = '<li><a href="admin_index.php">'.$lang_common['Admin'].'</a>';
-			$links[] = '<li><a href="login.php?action=out&amp;id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>';
+			$links[] = '<li id="navsearch"><a href="search.php">'.$lang_common['Search'].'</a>';
+			$links[] = '<li id="navprofile"><a href="profile.php?id='.$pun_user['id'].'">'.$lang_common['Profile'].'</a>';
+			$links[] = '<li id="navadmin"><a href="admin_index.php">'.$lang_common['Admin'].'</a>';
+			$links[] = '<li id="navlogout"><a href="login.php?action=out&amp;id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>';
 		}
 	}
 
-	return '<ul>'.implode($lang_common['Link separator'].'</li>', $links).'</li></ul>';
+	// Are there any additional navlinks we should insert into the array before imploding it?
+	if ($pun_config['o_additional_navlinks'] != '')
+	{
+		if (preg_match_all('#([0-9]+)\s*=\s*(.*?)\n#s', $pun_config['o_additional_navlinks']."\n", $extra_links))
+		{
+			// Insert any additional links into the $links array (at the correct index)
+			for ($i = 0; $i < count($extra_links[1]); ++$i)
+				array_splice($links, $extra_links[1][$i], 0, array('<li id="navextra'.($i + 1).'">'.$extra_links[2][$i]));
+		}
+	}
+
+	return '<ul>'."\n\t\t\t\t".implode($lang_common['Link separator'].'</li>'."\n\t\t\t\t", $links).'</li>'."\n\t\t\t".'</ul>';
 }
 
 
@@ -720,9 +735,15 @@
 //
 function pun_trim($str)
 {
-	$fishy_chars = array(chr(0x81), chr(0x8D), chr(0x8F), chr(0x90), chr(0x9D), chr(0xA0), chr(0xCA), '&nbsp;');
+	global $lang_common;
 
-	return trim(str_replace($fishy_chars, ' ', $str));
+	if (strpos($lang_common['lang_encoding'], '8859') !== false)
+	{
+		$fishy_chars = array(chr(0x81), chr(0x8D), chr(0x8F), chr(0x90), chr(0x9D), chr(0xA0));
+		return trim(str_replace($fishy_chars, ' ', $str));
+	}
+	else
+		return trim($str);
 }
 
 
@@ -812,7 +833,7 @@
 
 	// If the delay is 0 seconds, we might as well skip the redirect all together
 	if ($pun_config['o_redirect_delay'] == '0')
-		header('Location: '.$destination_url);
+		header('Location: '.str_replace('&amp;', '&', $destination_url));
 
 
 	// Load the redirect template
@@ -916,37 +937,39 @@
 <title><?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?> / Error</title>
 <style type="text/css">
 <!--
-BODY {margin: 20px 20%; font: 10px Verdana, Arial, Helvetica, sans-serif;}
-#errorbox {border: 1px solid #000;}
-H2 {margin: 0; color: #FFFFFF; background-color: #D25028; font-size: 1.1em; padding: 5px 4px; border-bottom: 1px solid #000;}
-#errorbox DIV {padding: 6px 5px; background-color: #dedfdf}
+BODY {MARGIN: 10% 20% auto 20%; font: 10px Verdana, Arial, Helvetica, sans-serif}
+#errorbox {BORDER: 1px solid #B84623}
+H2 {MARGIN: 0; COLOR: #FFFFFF; BACKGROUND-COLOR: #B84623; FONT-SIZE: 1.1em; PADDING: 5px 4px}
+#errorbox DIV {PADDING: 6px 5px; BACKGROUND-COLOR: #F1F1F1}
 -->
 </style>
 </head>
 <body>
-	<div id="errorbox">
-		<h2>An error was encountered</h2>
-		<div>
+
+<div id="errorbox">
+	<h2>An error was encountered</h2>
+	<div>
 <?php
 
 	if (defined('PUN_DEBUG'))
 	{
-		echo "\t\t\t".'<strong>File:</strong> '.$file.'<br />'."\n\t\t\t".'<strong>Line:</strong> '.$line.'<br /><br />'."\n\t\t\t".'<strong>PunBB reported</strong>: '.$message."\n";
+		echo "\t\t".'<strong>File:</strong> '.$file.'<br />'."\n\t\t".'<strong>Line:</strong> '.$line.'<br /><br />'."\n\t\t".'<strong>PunBB reported</strong>: '.$message."\n";
 
 		if ($db_error)
 		{
-			echo "\t\t\t".'<br /><br /><strong>Database reported:</strong> '.pun_htmlspecialchars($db_error['error_msg']).(($db_error['error_no']) ? ' (Errno: '.$db_error['error_no'].')' : '')."\n";
+			echo "\t\t".'<br /><br /><strong>Database reported:</strong> '.pun_htmlspecialchars($db_error['error_msg']).(($db_error['error_no']) ? ' (Errno: '.$db_error['error_no'].')' : '')."\n";
 
 			if ($db_error['error_sql'] != '')
-				echo "\t\t\t".'<br /><br /><strong>Failed query:</strong> '.pun_htmlspecialchars($db_error['error_sql'])."\n";
+				echo "\t\t".'<br /><br /><strong>Failed query:</strong> '.pun_htmlspecialchars($db_error['error_sql'])."\n";
 		}
 	}
 	else
-		echo "\t\t\t".'Error: <strong>'.$message.'.</strong>'."\n";
+		echo "\t\t".'Error: <strong>'.$message.'.</strong>'."\n";
 
 ?>
-		</div>
 	</div>
+</div>
+
 </body>
 </html>
 <?php
diff -urN punbb-1.2/upload/include/parser.php punbb-1.2.5/upload/include/parser.php
--- punbb-1.2/upload/include/parser.php	Thu Jan  6 21:29:06 2005
+++ punbb-1.2.5/upload/include/parser.php	Tue Apr  5 23:17:14 2005
@@ -45,29 +45,29 @@
 	$b = array('[b]', '[i]', '[u]', '[/b]', '[/i]', '[/u]');
 	$text = str_replace($a, $b, $text);
 
-	// Do the more complex BBCodes (and strip excessive whitespace)
-	$a = array( '#\[url=(.*?)\]\s*#i',
+	// Do the more complex BBCodes (also strip excessive whitespace and useless quotes)
+	$a = array( '#\[url=("|\'|)(.*?)\\1\]\s*#i',
 				'#\[url\]\s*#i',
 				'#\s*\[/url\]#i',
-				'#\[email=(.*?)\]\s*#i',
+				'#\[email=("|\'|)(.*?)\\1\]\s*#i',
 				'#\[email\]\s*#i',
 				'#\s*\[/email\]#i',
 				'#\[img\]\s*(.*?)\s*\[/img\]#is',
-				'#\[colou?r=(.*?)\](.*?)\[/colou?r\]#is');
+				'#\[colou?r=("|\'|)(.*?)\\1\](.*?)\[/colou?r\]#is');
 
-	$b = array(	'[url=$1]',
+	$b = array(	'[url=$2]',
 				'[url]',
 				'[/url]',
-				'[email=$1]',
+				'[email=$2]',
 				'[email]',
 				'[/email]',
 				'[img]$1[/img]',
-				'[color=$1]$2[/color]');
+				'[color=$2]$3[/color]');
 
 	if (!$is_signature)
 	{
 		// For non-signatures, we have to do the quote and code tags as well
-		$a[] = '#\[quote=(&quot;|"|\'|)(.{2,25})\\1\]\s*#i';
+		$a[] = '#\[quote=(&quot;|"|\'|)(.*?)\\1\]\s*#i';
 		$a[] = '#\[quote\]\s*#i';
 		$a[] = '#\s*\[/quote\]\s*#i';
 		$a[] = '#\[code\][\r\n]*(.*?)\s*\[/code\]\s*#is';
@@ -126,7 +126,7 @@
 		$q_end = strpos($text, '[/quote]');
 
 		// Look for [quote=username] style quote tags
-		if (preg_match('#\[quote=(&quot;|"|\'|)(.{2,25})\\1\]#sU', $text, $matches))
+		if (preg_match('#\[quote=(&quot;|"|\'|)(.*)\\1\]#sU', $text, $matches))
 			$q2_start = strpos($text, $matches[0]);
 		else
 			$q2_start = 65536;
@@ -182,8 +182,10 @@
 		// We found a [code]
 		else if ($c_start < min($c_end, $q_start, $q_end))
 		{
+			// Make sure there's a [/code] and that any new [code] doesn't occur before the end tag
 			$tmp = strpos($text, '[/code]');
-			if ($tmp === false)
+			$tmp2 = strpos(substr($text, 6), '[code]');
+			if ($tmp === false || ($tmp2 !== false && $tmp2 < $tmp))
 			{
 				$error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 2'];
 				return;
@@ -280,15 +282,15 @@
 function handle_img_tag($url, $is_signature = false)
 {
 	global $lang_common, $pun_config, $pun_user;
-
-	$img_tag = '<a href="'.$url.'">&lt;'.$lang_common['Image link'].'&gt;</a>';
 
-	if ($is_signature && $pun_user['show_img_sig'] != '0')
-		$img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
-	else if (!$is_signature && $pun_user['show_img'] != '0')
-		$img_tag = '</p><div class="imgbox"><div class="scrollbox"><img src="'.$url.'" alt="'.htmlspecialchars($url).'" /></div></div><p>';
-
-	return $img_tag;
+	$img_tag = '<a href="'.$url.'">&lt;'.$lang_common['Image link'].'&gt;</a>';
+
+	if ($is_signature && $pun_user['show_img_sig'] != '0')
+		$img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
+	else if (!$is_signature && $pun_user['show_img'] != '0')
+		$img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
+
+	return $img_tag;
 }
 
 
@@ -323,7 +325,7 @@
 	if (strpos($text, 'quote') !== false)
 	{
 		$text = str_replace('[quote]', '</p><blockquote><div class="incqbox"><p>', $text);
-		$text = preg_replace('#\[quote=(&quot;|"|\'|)(.{2,25})\\1\]#seU', '"</p><blockquote><div class=\"incqbox\"><h4>".str_replace(\'[\', \'&#91;\', \'$2\')." ".$lang_common[\'wrote\'].":</h4><p>"', $text);
+		$text = preg_replace('#\[quote=(&quot;|"|\'|)(.*)\\1\]#seU', '"</p><blockquote><div class=\"incqbox\"><h4>".str_replace(\'[\', \'&#91;\', \'$2\')." ".$lang_common[\'wrote\'].":</h4><p>"', $text);
 		$text = preg_replace('#\[\/quote\]\s*#', '</p></div></blockquote><p>', $text);
 	}
 
diff -urN punbb-1.2/upload/include/search_idx.php punbb-1.2.5/upload/include/search_idx.php
--- punbb-1.2/upload/include/search_idx.php	Fri Jan  7 01:12:22 2005
+++ punbb-1.2.5/upload/include/search_idx.php	Sun Jan 30 13:58:04 2005
@@ -147,6 +147,7 @@
 			switch ($db_type)
 			{
 				case 'mysql':
+				case 'mysqli':
 					$db->query('INSERT INTO '.$db->prefix.'search_words (word) VALUES'.implode(',', preg_replace('#^(.*)$#', '(\'\1\')', $new_words))) or error('Unable to insert search index words', __FILE__, __LINE__, $db->error());
 					break;
 
@@ -198,6 +199,7 @@
 	switch ($db_type)
 	{
 		case 'mysql':
+		case 'mysqli':
 		{
 			$result = $db->query('SELECT word_id FROM '.$db->prefix.'search_matches WHERE post_id IN('.$post_ids.') GROUP BY word_id') or error('Unable to fetch search index word match', __FILE__, __LINE__, $db->error());
 
diff -urN punbb-1.2/upload/index.php punbb-1.2.5/upload/index.php
--- punbb-1.2/upload/index.php	Sun Jan  2 01:50:50 2005
+++ punbb-1.2.5/upload/index.php	Tue Feb  1 17:16:46 2005
@@ -60,12 +60,6 @@
 	<div class="box">
 		<div class="inbox">
 			<table cellspacing="0">
-			<colgroup>
-				<col class="tcl" />
-				<col class="tc2" />
-				<col class="tc3" />
-				<col class="tcr" />
-			</colgroup>
 			<thead>
 				<tr>
 					<th class="tcl" scope="col"><?php echo $lang_common['Forum'] ?></th>
@@ -80,18 +74,26 @@
 		$cur_category = $cur_forum['cid'];
 	}
 
-	$icon = '<div class="inormal"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
+	$item_status = '';
+	$icon_text = $lang_common['Normal icon'];
+	$icon_type = 'icon';
 
 	// Are there new posts?
 	if (!$pun_user['is_guest'] && $cur_forum['last_post'] > $pun_user['last_visit'])
-		$icon = '<div class="inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
+	{
+		$item_status = 'inew';
+		$icon_text = $lang_common['New icon'];
+		$icon_type = 'icon inew';
+	}
 
 	// Is this a redirect forum?
 	if ($cur_forum['redirect_url'] != '')
 	{
 		$forum_field = '<h3><a href="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_forum['redirect_url']).'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a></h3>';
 		$num_topics = $num_posts = '&nbsp;';
-		$icon = '<div class="iredirect"><div class="nosize">'.$lang_common['Redirect icon'].'</div></div>'."\n";
+		$item_status = 'iredirect';
+		$icon_text = $lang_common['Redirect icon'];
+		$icon_type = 'icon';
 	}
 	else
 	{
@@ -101,12 +103,12 @@
 	}
 
 	if ($cur_forum['forum_desc'] != '')
-		$forum_field .= "\n\t\t\t\t\t\t\t".$cur_forum['forum_desc'];
+		$forum_field .= "\n\t\t\t\t\t\t\t\t".$cur_forum['forum_desc'];
 
 
 	// If there is a last_post/last_poster.
 	if ($cur_forum['last_post'] != '')
-		$last_post = '<a href="viewtopic.php?pid='.$cur_forum['last_post_id'].'#p'.$cur_forum['last_post_id'].'">'.format_time($cur_forum['last_post']).'</a><br />'.$lang_common['by'].' '.pun_htmlspecialchars($cur_forum['last_poster']);
+		$last_post = '<a href="viewtopic.php?pid='.$cur_forum['last_post_id'].'#p'.$cur_forum['last_post_id'].'">'.format_time($cur_forum['last_post']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_forum['last_poster']).'</span>';
 	else
 		$last_post = '&nbsp;';
 
@@ -118,14 +120,14 @@
 		while (list($mod_username, $mod_id) = @each($mods_array))
 			$moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';
 
-		$moderators = "\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
+		$moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
 	}
 
 ?>
-				<tr<?php if ($cur_forum['redirect_url'] != '') echo ' class="redirectrow"'; ?>>
+ 				<tr<?php if ($item_status != '') echo ' class="'.$item_status.'"'; ?>>
 					<td class="tcl">
 						<div class="intd">
-							<?php echo $icon ?>
+							<div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo $icon_text ?></div></div>
 							<div class="tclcon">
 								<?php echo $forum_field."\n".$moderators ?>
 							</div>
@@ -189,11 +191,13 @@
 
 	$num_users = count($users);
 	echo "\t\t\t\t".'<dd>'. $lang_index['Users online'].': <strong>'.$num_users.'</strong></dd>'."\n\t\t\t\t".'<dd>'.$lang_index['Guests online'].': <strong>'.$num_guests.'</strong></dd>'."\n\t\t\t".'</dl>'."\n";
-	echo "\t\t\t".'<div class="clearer"></div>'."\n";
 
 
 	if ($num_users > 0)
-		echo "\t\t\t".'<dl id="onlinelist">'."\n\t\t\t\t".'<dt><strong>'.$lang_index['Online'].':&nbsp;</strong></dt>'."\t\t\t\t".implode(',</dd> ', $users).'</dd>'."\n\t\t\t".'</dl>'."\n";
+		echo "\t\t\t".'<dl id="onlinelist" class= "clearb">'."\n\t\t\t\t".'<dt><strong>'.$lang_index['Online'].':&nbsp;</strong></dt>'."\t\t\t\t".implode(',</dd> ', $users).'</dd>'."\n\t\t\t".'</dl>'."\n";
+	else
+		echo "\t\t\t".'<div class="clearer"></div>'."\n";
+
 }
 else
 	echo "\t\t".'</dl>'."\n\t\t\t".'<div class="clearer"></div>'."\n";
diff -urN punbb-1.2/upload/install.php punbb-1.2.5/upload/install.php
--- punbb-1.2/upload/install.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/install.php	Thu Apr  7 23:26:36 2005
@@ -24,16 +24,17 @@
 
 
 // The PunBB version this script installs
-$punbb_version = '1.2';
+$punbb_version = '1.2.5';
 
 
 define('PUN_ROOT', './');
 if (file_exists(PUN_ROOT.'config.php'))
 	exit('The file \'config.php\' already exists which would mean that PunBB is already installed. You should go <a href="index.php">here</a> instead.');
 
+
 // Make sure we are running at least PHP 4.1.0
 if (intval(str_replace('.', '', phpversion())) < 410)
-	exit('You are running PHP version '.phpversion().'. PunBB requires at least PHP 4.1.0 to run properly. You must upgrade your PHP installation before you can continue.');
+	exit('You are running PHP version '.PHP_VERSION.'. PunBB requires at least PHP 4.1.0 to run properly. You must upgrade your PHP installation before you can continue.');
 
 // Disable error reporting for uninitialized variables
 error_reporting(E_ALL);
@@ -360,8 +361,8 @@
 
 		case 'pgsql':
 			// Make sure we are running at least PHP 4.3.0 (needed only for PostgreSQL)
-			if (intval(str_replace('.', '', phpversion())) < 430)
-				error('You are running PHP version '.phpversion().'. PunBB requires at least PHP 4.3.0 to run properly when using PostgreSQL. You must upgrade your PHP installation or use a different database before you can continue.');
+			if (version_compare(PHP_VERSION, '4.3.0', '<'))
+				error('You are running PHP version '.PHP_VERSION.'. PunBB requires at least PHP 4.3.0 to run properly when using PostgreSQL. You must upgrade your PHP installation or use a different database before you can continue.');
 			break;
 
 		case 'sqlite':
@@ -1094,7 +1095,7 @@
 		case 'mysqli':
 			$sql = 'CREATE TABLE '.$db_prefix."users (
 					id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-					group_id INT(10) NOT NULL DEFAULT 4,
+					group_id INT(10) UNSIGNED NOT NULL DEFAULT 4,
 					username VARCHAR(200) NOT NULL DEFAULT '',
 					password VARCHAR(40) NOT NULL DEFAULT '',
 					email VARCHAR(50) NOT NULL DEFAULT '',
@@ -1311,6 +1312,7 @@
 		'o_show_dot'				=> "'0'",
 		'o_quickjump'				=> "'1'",
 		'o_gzip'					=> "'0'",
+		'o_additional_navlinks'		=> "''",
 		'o_report_method'			=> "'0'",
 		'o_regs_report'				=> "'0'",
 		'o_mailing_list'			=> "'$email'",
@@ -1395,7 +1397,7 @@
 
 
 	/// Display config.php and give further instructions
-	$config = '<?php'."\n\n".'$db_type = \''.$db_type."';\n".'$db_host = \''.$db_host."';\n".'$db_name = \''.$db_name."';\n".'$db_username = \''.$db_username."';\n".'$db_password = \''.$db_password."';\n".'$db_prefix = \''.$db_prefix."';\n".'$p_connect = false;'."\n\n".'$cookie_name = '."'punbb_cookie';\n".'$cookie_domain = '."'';\n".'$cookie_path = '."'/';\n".'$cookie_secure = 0;'."\n".'$cookie_seed = \''.substr(md5(time()), -8)."';\n\ndefine('PUN', 1);\n\n?>";
+	$config = '<?php'."\n\n".'$db_type = \''.$db_type."';\n".'$db_host = \''.$db_host."';\n".'$db_name = \''.$db_name."';\n".'$db_username = \''.$db_username."';\n".'$db_password = \''.$db_password."';\n".'$db_prefix = \''.$db_prefix."';\n".'$p_connect = false;'."\n\n".'$cookie_name = '."'punbb_cookie';\n".'$cookie_domain = '."'';\n".'$cookie_path = '."'/';\n".'$cookie_secure = 0;'."\n".'$cookie_seed = \''.substr(md5(time()), -8)."';\n\ndefine('PUN', 1);";
 
 
 ?>
diff -urN punbb-1.2/upload/lang/English/common.php punbb-1.2.5/upload/lang/English/common.php
--- punbb-1.2/upload/lang/English/common.php	Thu Jan  6 17:30:30 2005
+++ punbb-1.2.5/upload/lang/English/common.php	Wed Jan 12 00:45:28 2005
@@ -146,7 +146,7 @@
 'Debug table'			=>	'Debug information',
 
 // For extern.php RSS feed
-'RSS Desc Active	'	=>	'The most recently active topics at',	// board_title will be appended to this string
+'RSS Desc Active'		=>	'The most recently active topics at',	// board_title will be appended to this string
 'RSS Desc New'			=>	'The newest topics at',					// board_title will be appended to this string
 'Posted'				=>	'Posted'	// The date/time a topic was started
 
diff -urN punbb-1.2/upload/lang/English/misc.php punbb-1.2.5/upload/lang/English/misc.php
--- punbb-1.2/upload/lang/English/misc.php	Sun Oct 31 20:50:28 2004
+++ punbb-1.2.5/upload/lang/English/misc.php	Sun Jan 16 04:30:38 2005
@@ -9,7 +9,7 @@
 'Form e-mail disabled'		=>	'The user you are trying to send an e-mail to has disabled form e-mail.',
 'No e-mail subject'			=>	'You must enter a subject.',
 'No e-mail message'			=>	'You must enter a message.',
-'Too long e-mail message'	=>	'Messages cannot be longer that 65535 characters (64 Kb).',
+'Too long e-mail message'	=>	'Messages cannot be longer than 65535 characters (64 KB).',
 'E-mail sent redirect'		=>	'E-mail sent. Redirecting &hellip;',
 'Send e-mail to'			=>	'Send e-mail to',
 'E-mail subject'			=>	'Subject',
diff -urN punbb-1.2/upload/lang/English/profile.php punbb-1.2.5/upload/lang/English/profile.php
--- punbb-1.2/upload/lang/English/profile.php	Wed Nov  3 21:45:54 2004
+++ punbb-1.2.5/upload/lang/English/profile.php	Fri Jan 14 22:48:58 2005
@@ -46,6 +46,7 @@
 'Avatars disabled'			=>	'The administrator has disabled avatar support.',
 'Too large ini'				=>	'The selected file was too large to upload. The server didn\'t allow the upload.',
 'Partial upload'			=>	'The selected file was only partially uploaded. Please try again.',
+'No tmp directory'			=>	'PHP was unable to save the uploaded file to a temporary location.',
 'No file'					=>	'You did not select a file for upload.',
 'Bad type'					=>	'The file you tried to upload is not of an allowed type. Allowed types are gif, jpeg and png.',
 'Too wide or high'			=>	'The file you tried to upload is wider and/or higher than the maximum allowed',
diff -urN punbb-1.2/upload/login.php punbb-1.2.5/upload/login.php
--- punbb-1.2/upload/login.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/login.php	Fri Apr  1 20:08:04 2005
@@ -40,7 +40,9 @@
 	$form_username = trim($_POST['req_username']);
 	$form_password = trim($_POST['req_password']);
 
-	$result = $db->query('SELECT id, group_id, password, save_pass FROM '.$db->prefix.'users WHERE username=\''.$db->escape($form_username).'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
+	$username_sql = ($db_type == 'mysql' || $db_type == 'mysqli') ? 'username=\''.$db->escape($form_username).'\'' : 'LOWER(username)=LOWER(\''.$db->escape($form_username).'\')';
+
+	$result = $db->query('SELECT id, group_id, password, save_pass FROM '.$db->prefix.'users WHERE '.$username_sql) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 	list($user_id, $group_id, $db_password_hash, $save_pass) = $db->fetch_row($result);
 
 	$authorized = false;
@@ -90,6 +92,10 @@
 
 	// Remove user from "users online" list.
 	$db->query('DELETE FROM '.$db->prefix.'online WHERE user_id='.$pun_user['id']) or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());
+
+	// Update last_visit (make sure there's something to update it with)
+	if (isset($pun_user['logged']))
+		$db->query('UPDATE '.$db->prefix.'users SET last_visit='.$pun_user['logged'].' WHERE id='.$pun_user['id']) or error('Unable to update user visit data', __FILE__, __LINE__, $db->error());
 
 	pun_setcookie(1, random_pass(8), time() + 31536000);
 
diff -urN punbb-1.2/upload/misc.php punbb-1.2.5/upload/misc.php
--- punbb-1.2/upload/misc.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/misc.php	Fri Apr  1 20:38:52 2005
@@ -118,7 +118,7 @@
 
 		require_once PUN_ROOT.'include/email.php';
 
-		pun_mail($recipient_email, $mail_subject, $mail_message, $pun_user['username'].' <'.$pun_user['email'].'>');
+		pun_mail($recipient_email, $mail_subject, $mail_message, '"'.str_replace('"', '', $pun_user['username']).'" <'.$pun_user['email'].'>');
 
 		redirect($_POST['redirect_url'], $lang_misc['E-mail sent redirect']);
 	}
@@ -245,7 +245,7 @@
 
 else if (isset($_GET['subscribe']))
 {
-	if ($pun_user['is_guest'])
+	if ($pun_user['is_guest'] || $pun_config['o_subscriptions'] != '1')
 		message($lang_common['No permission']);
 
 	$topic_id = intval($_GET['subscribe']);
@@ -264,7 +264,7 @@
 
 else if (isset($_GET['unsubscribe']))
 {
-	if ($pun_user['is_guest'])
+	if ($pun_user['is_guest'] || $pun_config['o_subscriptions'] != '1')
 		message($lang_common['No permission']);
 
 	$topic_id = intval($_GET['unsubscribe']);
diff -urN punbb-1.2/upload/moderate.php punbb-1.2.5/upload/moderate.php
--- punbb-1.2/upload/moderate.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/moderate.php	Sun Mar 20 17:16:04 2005
@@ -50,7 +50,7 @@
 		$ip = $db->result($result);
 	}
 
-	message('The IP address is: '.$ip.'<br />The host name is: '.gethostbyaddr($ip).'<br /><br /><a href="admin_users.php?show_users='.$ip.'">Show more users for this IP</a>');
+	message('The IP address is: '.$ip.'<br />The host name is: '.@gethostbyaddr($ip).'<br /><br /><a href="admin_users.php?show_users='.$ip.'">Show more users for this IP</a>');
 }
 
 
@@ -98,6 +98,9 @@
 		{
 			confirm_referrer('moderate.php');
 
+			if (preg_match('/[^0-9,]/', $posts))
+				message($lang_common['Bad request']);
+
 			// Delete the posts
 			$db->query('DELETE FROM '.$db->prefix.'posts WHERE id IN('.$posts.')') or error('Unable to delete posts', __FILE__, __LINE__, $db->error());
 
@@ -278,8 +281,11 @@
 	{
 		confirm_referrer('moderate.php');
 
+		if (preg_match('/[^0-9,]/', $_POST['topics']))
+			message($lang_common['Bad request']);
+
 		$topics = explode(',', $_POST['topics']);
-		$move_to_forum = intval($_POST['move_to_forum']);
+		$move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;
 		if (empty($topics) || $move_to_forum < 1)
 			message($lang_common['Bad request']);
 
@@ -345,7 +351,7 @@
 						<br /><select name="move_to_forum">
 <?php
 
-	$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id WHERE f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
+	$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['group_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
 
 	$cur_category = 0;
 	while ($cur_forum = $db->fetch_assoc($result))
@@ -394,6 +400,9 @@
 	{
 		confirm_referrer('moderate.php');
 
+		if (preg_match('/[^0-9,]/', $topics))
+			message($lang_common['Bad request']);
+
 		require PUN_ROOT.'include/search_idx.php';
 
 		// Delete the topics and any redirect topics
@@ -459,11 +468,11 @@
 	{
 		confirm_referrer('moderate.php');
 
-		$topics = isset($_POST['topics']) ? $_POST['topics'] : array();
+		$topics = isset($_POST['topics']) ? @array_map('intval', @array_keys($_POST['topics'])) : array();
 		if (empty($topics))
 			message($lang_misc['No topics selected']);
 
-		$db->query('UPDATE '.$db->prefix.'topics SET closed='.$action.' WHERE id IN('.implode(',', array_keys($topics)).')') or error('Unable to close topics', __FILE__, __LINE__, $db->error());
+		$db->query('UPDATE '.$db->prefix.'topics SET closed='.$action.' WHERE id IN('.implode(',', $topics).')') or error('Unable to close topics', __FILE__, __LINE__, $db->error());
 
 		$redirect_msg = ($action) ? $lang_misc['Close topics redirect'] : $lang_misc['Open topics redirect'];
 		redirect('moderate.php?fid='.$fid, $redirect_msg);
@@ -560,7 +569,7 @@
 			<table cellspacing="0">
 			<thead>
 				<tr>
-					<th class="tc1" scope="col"><?php echo $lang_common['Topic'] ?></th>
+					<th class="tcl" scope="col"><?php echo $lang_common['Topic'] ?></th>
 					<th class="tc2" scope="col"><?php echo $lang_common['Replies'] ?></th>
 					<th class="tc3" scope="col"><?php echo $lang_forum['Views'] ?></th>
 					<th class="tcr"><?php echo $lang_common['Last post'] ?></th>
@@ -580,7 +589,11 @@
 
 	while ($cur_topic = $db->fetch_assoc($result))
 	{
-		$icon = '<div class="inormal"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
+
+		$icon_text = $lang_common['Normal icon'];
+		$item_status = '';
+		$icon_type = 'icon';
+
 		if ($cur_topic['moved_to'] == null)
 		{
 			$last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.format_time($cur_topic['last_post']).'</a> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['last_poster']);
@@ -601,16 +614,18 @@
 			$subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span>'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['poster']).'</span>';
 		else
 		{
-			$subject = '<a class="showclosed" href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
-			$icon = '<div class="iclosed"><div class="nosize">'.$lang_common['Closed icon'].'</div></div>'."\n";
+			$subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
+			$icon_text = $lang_common['Closed icon'];
+			$item_status = 'iclosed';
 		}
 
 		if ($cur_topic['last_post'] > $pun_user['last_visit'] && !$ghost_topic)
 		{
-			$icon = '<div class="inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
-
+			$icon_text .= ' '.$lang_common['New icon'];
+			$item_status .= ' inew';
+			$icon_type = 'icon inew';
 			$subject = '<strong>'.$subject.'</strong>';
-			$subject_new_posts = '[&nbsp;<a href="viewtopic.php?id='.$cur_topic['id'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]';
+			$subject_new_posts = '<span class="newtext">[&nbsp;<a href="viewtopic.php?id='.$cur_topic['id'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]</span>';
 		}
 		else
 			$subject_new_posts = null;
@@ -620,8 +635,11 @@
 			$subject = '&nbsp;&nbsp;'.$subject;
 
 		if ($cur_topic['sticky'] == '1')
-			$subject = $lang_forum['Sticky'].': '.$subject;
-
+		{
+			$subject = '<span class="stickytext">'.$lang_forum['Sticky'].': </span>'.$subject;
+			$item_status .= ' isticky';
+			$icon_text .= ' '.$lang_forum['Sticky'];
+		}
 
 		$num_pages_topic = ceil(($cur_topic['num_replies'] + 1) / $pun_user['disp_posts']);
 
@@ -638,9 +656,9 @@
 		}
 
 ?>
-				<tr>
+				<tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>>
 					<td class="tcl">
-						<?php echo $icon ?>
+						<div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo trim($icon_text) ?></div></div>
 						<div class="tclcon">
 							<?php echo $subject."\n" ?>
 						</div>
diff -urN punbb-1.2/upload/plugins/AMP_Example.php punbb-1.2.5/upload/plugins/AMP_Example.php
--- punbb-1.2/upload/plugins/AMP_Example.php	Thu Dec 30 23:52:24 2004
+++ punbb-1.2.5/upload/plugins/AMP_Example.php	Wed Jan 26 20:41:44 2005
@@ -1,4 +1,27 @@
 <?php
+/***********************************************************************
+
+  Copyright (C) 2002-2005  Rickard Andersson (rickard@punbb.org)
+
+  This file is part of PunBB.
+
+  PunBB is free software; you can redistribute it and/or modify it
+  under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 2 of the License,
+  or (at your option) any later version.
+
+  PunBB is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+  MA  02111-1307  USA
+
+************************************************************************/
+
 ##
 ##
 ##  A few notes of interest for aspiring plugin authors:
@@ -36,11 +59,17 @@
 ##     plugins. If you create your own styles they need to be added to
 ##     the "base_admin" style sheet.
 ##
-##  8. Consider releasing your plugins under the GNU General Public
-##     License (or equivalent).
+##  8. Plugins must be released under the GNU General Public License or
+##     a GPL compatible license. Copy the GPL preamble at the top of
+##     this file into your plugin script and alter the copyright notice
+##     to refrect the author of the plugin (i.e. you).
 ##
 ##
 
+
+// Make sure no one attempts to run this script "directly"
+if (!defined('PUN'))
+	exit;
 
 // Tell admin_loader.php that this is indeed a plugin and that it is loaded
 define('PUN_PLUGIN_LOADED', 1);
diff -urN punbb-1.2/upload/post.php punbb-1.2.5/upload/post.php
--- punbb-1.2/upload/post.php	Wed Jan  5 17:22:56 2005
+++ punbb-1.2.5/upload/post.php	Mon Feb 28 03:02:16 2005
@@ -207,73 +207,76 @@
 
 			update_forum($cur_posting['id']);
 
-
-			// Get the post time for the previous post in this topic
-			$result = $db->query('SELECT posted FROM '.$db->prefix.'posts WHERE topic_id='.$tid.' ORDER BY id DESC LIMIT 1, 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
-			$previous_post_time = $db->result($result);
-
-			// Get any subscribed users that should be notified (banned users are excluded)
-			$result = $db->query('SELECT u.id, u.email, u.notify_with_post, u.language FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'subscriptions AS s ON u.id=s.user_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id='.$cur_posting['id'].' AND fp.group_id=u.group_id) LEFT JOIN '.$db->prefix.'online AS o ON u.id=o.user_id LEFT JOIN '.$db->prefix.'bans AS b ON u.username=b.username WHERE b.username IS NULL AND COALESCE(o.logged, u.last_visit)>'.$previous_post_time.' AND (fp.read_forum IS NULL OR fp.read_forum=1) AND s.topic_id='.$tid.' AND u.id!='.intval($pun_user['id'])) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
-			if ($db->num_rows($result))
+			// Should we send out notifications?
+			if ($pun_config['o_subscriptions'] == '1')
 			{
-				require_once PUN_ROOT.'include/email.php';
+				// Get the post time for the previous post in this topic
+				$result = $db->query('SELECT posted FROM '.$db->prefix.'posts WHERE topic_id='.$tid.' ORDER BY id DESC LIMIT 1, 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
+				$previous_post_time = $db->result($result);
+
+				// Get any subscribed users that should be notified (banned users are excluded)
+				$result = $db->query('SELECT u.id, u.email, u.notify_with_post, u.language FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'subscriptions AS s ON u.id=s.user_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id='.$cur_posting['id'].' AND fp.group_id=u.group_id) LEFT JOIN '.$db->prefix.'online AS o ON u.id=o.user_id LEFT JOIN '.$db->prefix.'bans AS b ON u.username=b.username WHERE b.username IS NULL AND COALESCE(o.logged, u.last_visit)>'.$previous_post_time.' AND (fp.read_forum IS NULL OR fp.read_forum=1) AND s.topic_id='.$tid.' AND u.id!='.intval($pun_user['id'])) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
+				if ($db->num_rows($result))
+				{
+					require_once PUN_ROOT.'include/email.php';
 
-				$notification_emails = array();
+					$notification_emails = array();
 
-				// Loop through subscribed users and send e-mails
-				while ($cur_subscriber = $db->fetch_assoc($result))
-				{
-					// Is the subscription e-mail for $cur_subscriber['language'] cached or not?
-					if (!isset($notification_emails[$cur_subscriber['language']]))
+					// Loop through subscribed users and send e-mails
+					while ($cur_subscriber = $db->fetch_assoc($result))
 					{
-						if (file_exists(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply.tpl'))
+						// Is the subscription e-mail for $cur_subscriber['language'] cached or not?
+						if (!isset($notification_emails[$cur_subscriber['language']]))
 						{
-							// Load the "new reply" template
-							$mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply.tpl'));
-
-							// Load the "new reply full" template (with post included)
-							$mail_tpl_full = trim(file_get_contents(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply_full.tpl'));
-
-							// The first row contains the subject (it also starts with "Subject:")
-							$first_crlf = strpos($mail_tpl, "\n");
-							$mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
-							$mail_message = trim(substr($mail_tpl, $first_crlf));
-
-							$first_crlf = strpos($mail_tpl_full, "\n");
-							$mail_subject_full = trim(substr($mail_tpl_full, 8, $first_crlf-8));
-							$mail_message_full = trim(substr($mail_tpl_full, $first_crlf));
-
-							$mail_subject = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_subject);
-							$mail_message = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_message);
-							$mail_message = str_replace('<replier>', $username, $mail_message);
-							$mail_message = str_replace('<post_url>', $pun_config['o_base_url'].'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message);
-							$mail_message = str_replace('<unsubscribe_url>', $pun_config['o_base_url'].'/misc.php?unsubscribe='.$tid, $mail_message);
-							$mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);
-
-							$mail_subject_full = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_subject_full);
-							$mail_message_full = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_message_full);
-							$mail_message_full = str_replace('<replier>', $username, $mail_message_full);
-							$mail_message_full = str_replace('<message>', $message, $mail_message_full);
-							$mail_message_full = str_replace('<post_url>', $pun_config['o_base_url'].'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message_full);
-							$mail_message_full = str_replace('<unsubscribe_url>', $pun_config['o_base_url'].'/misc.php?unsubscribe='.$tid, $mail_message_full);
-							$mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message_full);
-
-							$notification_emails[$cur_subscriber['language']][0] = $mail_subject;
-							$notification_emails[$cur_subscriber['language']][1] = $mail_message;
-							$notification_emails[$cur_subscriber['language']][2] = $mail_subject_full;
-							$notification_emails[$cur_subscriber['language']][3] = $mail_message_full;
+							if (file_exists(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply.tpl'))
+							{
+								// Load the "new reply" template
+								$mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply.tpl'));
+
+								// Load the "new reply full" template (with post included)
+								$mail_tpl_full = trim(file_get_contents(PUN_ROOT.'lang/'.$cur_subscriber['language'].'/mail_templates/new_reply_full.tpl'));
+
+								// The first row contains the subject (it also starts with "Subject:")
+								$first_crlf = strpos($mail_tpl, "\n");
+								$mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
+								$mail_message = trim(substr($mail_tpl, $first_crlf));
+
+								$first_crlf = strpos($mail_tpl_full, "\n");
+								$mail_subject_full = trim(substr($mail_tpl_full, 8, $first_crlf-8));
+								$mail_message_full = trim(substr($mail_tpl_full, $first_crlf));
+
+								$mail_subject = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_subject);
+								$mail_message = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_message);
+								$mail_message = str_replace('<replier>', $username, $mail_message);
+								$mail_message = str_replace('<post_url>', $pun_config['o_base_url'].'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message);
+								$mail_message = str_replace('<unsubscribe_url>', $pun_config['o_base_url'].'/misc.php?unsubscribe='.$tid, $mail_message);
+								$mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);
+
+								$mail_subject_full = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_subject_full);
+								$mail_message_full = str_replace('<topic_subject>', '\''.$cur_posting['subject'].'\'', $mail_message_full);
+								$mail_message_full = str_replace('<replier>', $username, $mail_message_full);
+								$mail_message_full = str_replace('<message>', $message, $mail_message_full);
+								$mail_message_full = str_replace('<post_url>', $pun_config['o_base_url'].'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message_full);
+								$mail_message_full = str_replace('<unsubscribe_url>', $pun_config['o_base_url'].'/misc.php?unsubscribe='.$tid, $mail_message_full);
+								$mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message_full);
+
+								$notification_emails[$cur_subscriber['language']][0] = $mail_subject;
+								$notification_emails[$cur_subscriber['language']][1] = $mail_message;
+								$notification_emails[$cur_subscriber['language']][2] = $mail_subject_full;
+								$notification_emails[$cur_subscriber['language']][3] = $mail_message_full;
 
-							$mail_subject = $mail_message = $mail_subject_full = $mail_message_full = null;
+								$mail_subject = $mail_message = $mail_subject_full = $mail_message_full = null;
+							}
 						}
-					}
 
-					// We have to double check here because the templates could be missing
-					if (isset($notification_emails[$cur_subscriber['language']]))
-					{
-						if ($cur_subscriber['notify_with_post'] == '0')
-							pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][0], $notification_emails[$cur_subscriber['language']][1]);
-						else
-							pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);
+						// We have to double check here because the templates could be missing
+						if (isset($notification_emails[$cur_subscriber['language']]))
+						{
+							if ($cur_subscriber['notify_with_post'] == '0')
+								pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][0], $notification_emails[$cur_subscriber['language']][1]);
+							else
+								pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);
+						}
 					}
 				}
 			}
@@ -437,7 +440,7 @@
 else if (isset($_POST['preview']))
 {
 	require_once PUN_ROOT.'include/parser.php';
-	$message = parse_message(trim($_POST['req_message']), $hide_smilies);
+	$message = parse_message($message, $hide_smilies);
 
 ?>
 <div id="postpreview" class="blockpost">
diff -urN punbb-1.2/upload/profile.php punbb-1.2.5/upload/profile.php
--- punbb-1.2/upload/profile.php	Fri Jan  7 17:33:36 2005
+++ punbb-1.2.5/upload/profile.php	Thu Apr  7 21:49:28 2005
@@ -27,16 +27,15 @@
 require PUN_ROOT.'include/common.php';
 
 
-if ($pun_user['g_read_board'] == '0' && !isset($_GET['key']))
-	message($lang_common['No view']);
-
-
 $action = isset($_GET['action']) ? $_GET['action'] : null;
 $section = isset($_GET['section']) ? $_GET['section'] : null;
 $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
 if ($id < 2)
 	message($lang_common['Bad request']);
 
+if ($pun_user['g_read_board'] == '0' && ($action != 'change_pass' || !isset($_GET['key'])))
+	message($lang_common['No view']);
+
 // Load the profile.php/register.php language file
 require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php';
 
@@ -60,7 +59,7 @@
 		$result = $db->query('SELECT activate_string, activate_key FROM '.$db->prefix.'users WHERE id='.$id) or error('Unable to fetch new password', __FILE__, __LINE__, $db->error());
 		list($new_password_hash, $new_password_key) = $db->fetch_row($result);
 
-		if ($key != $new_password_key)
+		if ($key == '' || $key != $new_password_key)
 			message($lang_profile['Pass key bad'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');
 		else
 		{
@@ -195,7 +194,7 @@
 			message($lang_profile['E-mail key bad'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');
 		else
 		{
-			$db->query('UPDATE '.$db->prefix.'users SET email=\''.$new_email.'\', activate_string=NULL, activate_key=NULL WHERE id='.$id) or error('Unable to update e-mail address', __FILE__, __LINE__, $db->error());
+			$db->query('UPDATE '.$db->prefix.'users SET email=activate_string, activate_string=NULL, activate_key=NULL WHERE id='.$id) or error('Unable to update e-mail address', __FILE__, __LINE__, $db->error());
 
 			message($lang_profile['E-mail updated'], true);
 		}
@@ -224,7 +223,7 @@
 		}
 
 		// Check if someone else already has registered with that e-mail address
-		$result = $db->query('SELECT id, username FROM '.$db->prefix.'users WHERE email=\''.$new_email.'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
+		$result = $db->query('SELECT id, username FROM '.$db->prefix.'users WHERE email=\''.$db->escape($new_email).'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 		if ($db->num_rows($result))
 		{
 			if ($pun_config['p_allow_dupe_email'] == '0')
@@ -244,7 +243,7 @@
 
 		$new_email_key = random_pass(8);
 
-		$db->query('UPDATE '.$db->prefix.'users SET activate_string=\''.$new_email.'\', activate_key=\''.$new_email_key.'\' WHERE id='.$id) or error('Unable to update activation data', __FILE__, __LINE__, $db->error());
+		$db->query('UPDATE '.$db->prefix.'users SET activate_string=\''.$db->escape($new_email).'\', activate_key=\''.$new_email_key.'\' WHERE id='.$id) or error('Unable to update activation data', __FILE__, __LINE__, $db->error());
 
 		// Load the "activate e-mail" template
 		$mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/activate_email.tpl'));
@@ -304,6 +303,9 @@
 
 	if (isset($_POST['form_sent']))
 	{
+		if (!isset($_FILES['req_file']))
+			message($lang_profile['No file']);
+			
 		$uploaded_file = $_FILES['req_file'];
 
 		// Make sure the upload went smooth
@@ -324,6 +326,10 @@
 					message($lang_profile['No file']);
 					break;
 
+				case 6:	// UPLOAD_ERR_NO_TMP_DIR
+					message($lang_profile['No tmp directory']);
+					break;
+
 				default:
 					// No error occured, but was something actually uploaded?
 					if ($uploaded_file['size'] == 0)
@@ -357,7 +363,7 @@
 
 			// Now check the width/height
 			list($width, $height, ,) = getimagesize($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
-			if ($width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
+			if (empty($width) || empty($height) || $width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
 			{
 				@unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
 				message($lang_profile['Too wide or high'].' '.$pun_config['o_avatars_width'].'x'.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].'.');
@@ -395,8 +401,8 @@
 					<div class="infldset">
 						<input type="hidden" name="form_sent" value="1" />
 						<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $pun_config['o_avatars_size'] ?>" />
-						<p><?php echo $lang_profile['Avatar desc'].' '.$pun_config['o_avatars_width'].' x '.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].' '.$lang_common['and'].' '.$pun_config['o_avatars_size'].' '.$lang_profile['bytes'].' ('.ceil($pun_config['o_avatars_size'] / 1024) ?> KB).</p>
 						<label><strong><?php echo $lang_profile['File'] ?></strong><br /><input name="req_file" type="file" size="40" /><br /></label>
+						<p><?php echo $lang_profile['Avatar desc'].' '.$pun_config['o_avatars_width'].' x '.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].' '.$lang_common['and'].' '.$pun_config['o_avatars_size'].' '.$lang_profile['bytes'].' ('.ceil($pun_config['o_avatars_size'] / 1024) ?> KB).</p>
 					</div>
 				</fieldset>
 			</div>
@@ -601,7 +607,7 @@
 						<div class="rbox">
 							<label><input type="checkbox" name="delete_posts" value="1" checked="checked" /><?php echo $lang_profile['Delete posts'] ?><br /></label>
 						</div>
-						<p><strong class="showhot"><?php echo $lang_profile['Delete warning'] ?></strong></p>
+						<p class="warntext"><strong><?php echo $lang_profile['Delete warning'] ?></strong></p>
 					</div>
 				</fieldset>
 			</div>
@@ -654,7 +660,7 @@
 	{
 		case 'essentials':
 		{
-			$form = extract_elements(array('timezone', 'language', 'style'));
+			$form = extract_elements(array('timezone', 'language'));
 
 			if ($pun_user['g_id'] < PUN_GUEST)
 			{
@@ -708,7 +714,7 @@
 		{
 			$form = extract_elements(array('realname', 'url', 'location'));
 
-			if ($pun_user['g_id'] < PUN_GUEST)
+			if ($pun_user['g_id'] == PUN_ADMIN)
 				$form['title'] = trim($_POST['title']);
 			else if ($pun_user['g_set_title'] == '1')
 			{
@@ -816,7 +822,7 @@
 	// Singlequotes around non-empty values and NULL for empty values
 	while (list($key, $input) = @each($form))
 	{
-		$value = ($input != '') ? '\''.$db->escape($input).'\'' : 'NULL';
+		$value = ($input !== '') ? '\''.$db->escape($input).'\'' : 'NULL';
 
 		$temp[] = $key.'='.$value;
 	}
@@ -963,7 +969,7 @@
 					<div class="infldset">
 						<dl>
 							<dt><?php echo $lang_profile['Jabber'] ?>: </dt>
-							<dd><?php echo ($user['jabber'] !='') ? $user['jabber'] : $lang_profile['Unknown']; ?></dd>
+							<dd><?php echo ($user['jabber'] !='') ? pun_htmlspecialchars($user['jabber']) : $lang_profile['Unknown']; ?></dd>
 							<dt><?php echo $lang_profile['ICQ'] ?>: </dt>
 							<dd><?php echo ($user['icq'] !='') ? $user['icq'] : $lang_profile['Unknown']; ?></dd>
 							<dt><?php echo $lang_profile['MSN'] ?>: </dt>
@@ -1179,7 +1185,7 @@
 	}
 	else if ($section == 'personal')
 	{
-		if ($pun_user['g_set_title'] == '1' || $pun_user['g_id'] < PUN_GUEST)
+		if ($pun_user['g_set_title'] == '1')
 			$title_field = '<label>'.$lang_common['Title'].'&nbsp;&nbsp;(<em>'.$lang_profile['Leave blank'].'</em>)<br /><input type="text" name="title" value="'.pun_htmlspecialchars($user['title']).'" size="30" maxlength="50" /><br /></label>'."\n";
 
 		$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_common['Profile'];
@@ -1229,7 +1235,7 @@
 						<legend><?php echo $lang_profile['Contact details legend'] ?></legend>
 						<div class="infldset">
 							<input type="hidden" name="form_sent" value="1" />
-							<label><?php echo $lang_profile['Jabber'] ?><br /><input id="jabber" type="text" name="form[jabber]" value="<?php echo $user['jabber'] ?>" size="40" maxlength="75" /><br /></label>
+							<label><?php echo $lang_profile['Jabber'] ?><br /><input id="jabber" type="text" name="form[jabber]" value="<?php echo pun_htmlspecialchars($user['jabber']) ?>" size="40" maxlength="75" /><br /></label>
 							<label><?php echo $lang_profile['ICQ'] ?><br /><input id="icq" type="text" name="form[icq]" value="<?php echo $user['icq'] ?>" size="12" maxlength="12" /><br /></label>
 							<label><?php echo $lang_profile['MSN'] ?><br /><input id="msn" type="text" name="form[msn]" value="<?php echo pun_htmlspecialchars($user['msn']) ?>" size="40" maxlength="50" /><br /></label>
 							<label><?php echo $lang_profile['AOL IM'] ?><br /><input id="aim" type="text" name="form[aim]" value="<?php echo pun_htmlspecialchars($user['aim']) ?>" size="20" maxlength="30" /><br /></label>
@@ -1286,7 +1292,7 @@
 							<div class="rbox">
 								<label><input type="checkbox" name="form[use_avatar]" value="1"<?php if ($user['use_avatar'] == '1') echo ' checked="checked"' ?> /><?php echo $lang_profile['Use avatar'] ?><br /></label>
 							</div>
-							<p><?php echo $avatar_field ?></p>
+							<p class="clearb"><?php echo $avatar_field ?></p>
 						</div>
 					</fieldset>
 				</div>
@@ -1393,10 +1399,9 @@
 					<fieldset>
 						<legend><?php echo $lang_profile['Pagination legend'] ?></legend>
 						<div class="infldset">
-							<p><?php echo $lang_profile['Paginate info'] ?> <?php echo $lang_profile['Leave blank'] ?></p>
 							<label class="conl"><?php echo $lang_profile['Topics per page'] ?><br /><input type="text" name="form[disp_topics]" value="<?php echo $user['disp_topics'] ?>" size="6" maxlength="3" /><br /></label>
 							<label class="conl"><?php echo $lang_profile['Posts per page'] ?><br /><input type="text" name="form[disp_posts]" value="<?php echo $user['disp_posts'] ?>" size="6" maxlength="3" /><br /></label>
-							<div class="clearer"></div>
+							<p class="clearb"><?php echo $lang_profile['Paginate info'] ?> <?php echo $lang_profile['Leave blank'] ?></p>
 						</div>
 					</fieldset>
 				</div>
@@ -1516,7 +1521,7 @@
 				</div>
 <?php
 
-			if ($user['g_id'] < PUN_GUEST)
+			if ($user['g_id'] == PUN_MOD || $user['g_id'] == PUN_ADMIN)
 			{
 
 ?>
diff -urN punbb-1.2/upload/register.php punbb-1.2.5/upload/register.php
--- punbb-1.2/upload/register.php	Fri Dec 31 15:40:34 2004
+++ punbb-1.2.5/upload/register.php	Thu Feb 24 23:16:34 2005
@@ -180,7 +180,7 @@
 	$password_hash = pun_hash($password1);
 
 	// Add the user
-	$db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$language.'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
+	$db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
 	$new_uid = $db->insert_id();
 
 
diff -urN punbb-1.2/upload/search.php punbb-1.2.5/upload/search.php
--- punbb-1.2/upload/search.php	Fri Jan  7 15:25:44 2005
+++ punbb-1.2.5/upload/search.php	Tue Feb  1 17:16:46 2005
@@ -62,8 +62,8 @@
 	// If it's a regular search (keywords and/or author)
 	else if ($action == 'search')
 	{
-		$keywords = (isset($_GET['keywords'])) ? trim($_GET['keywords']) : null;
-		$author = (isset($_GET['author'])) ? trim($_GET['author']) : null;
+		$keywords = (isset($_GET['keywords'])) ? strtolower(trim($_GET['keywords'])) : null;
+		$author = (isset($_GET['author'])) ? strtolower(trim($_GET['author'])) : null;
 
 		if (!$keywords && !$author)
 			message($lang_search['No terms']);
@@ -162,7 +162,7 @@
 				}
 
 				$word_count = 0;
-				$match_type = 'or';
+				$match_type = 'and';
 				@reset($keywords_array);
 				while (list(, $cur_word) = @each($keywords_array))
 				{
@@ -297,7 +297,7 @@
 
 				$num_hits = count($search_ids);
 			}
-			else if ($forum_sql != '')
+			else
 			{
 				$result = $db->query('SELECT p.id FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id IN('.implode(',', $search_ids).')'.$forum_sql, true) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
 
@@ -506,12 +506,6 @@
 	<div class="box">
 		<div class="inbox">
 			<table cellspacing="0">
-			<colgroup>
-				<col class="tcl" />
-				<col class="tc2" />
-				<col class="tc3" />
-				<col class="tcr" />
-			</colgroup>
 			<thead>
 				<tr>
 					<th class="tcl" scope="col"><?php echo $lang_common['Topic']; ?></th>
@@ -548,11 +542,11 @@
 
 			if ($show_as == 'posts')
 			{
-				$icon = '<div class="inormal"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
+				$icon = '<div class="icon"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
 				$subject = '<a href="viewtopic.php?id='.$search_set[$i]['tid'].'">'.pun_htmlspecialchars($search_set[$i]['subject']).'</a>';
 
 				if (!$pun_user['is_guest'] && $search_set[$i]['last_post'] > $pun_user['last_visit'])
-					$icon = '<div class="inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
+					$icon = '<div class="icon inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
 
 
 				if ($pun_config['o_censoring'] == '1')
@@ -601,18 +595,28 @@
 			}
 			else
 			{
-				$icon = '<div class="inormal"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
+				$icon = '<div class="icon"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
 
-				if ($search_set[$i]['closed'] != '1')
-					$subject = '<a href="viewtopic.php?id='.$search_set[$i]['tid'].'">'.pun_htmlspecialchars($search_set[$i]['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($search_set[$i]['poster']).'</span>';
-				else
-					$subject = '<a class="showclosed" href="viewtopic.php?id='.$search_set[$i]['tid'].'">'.pun_htmlspecialchars($search_set[$i]['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($search_set[$i]['poster']).'</span>';
+				$icon_text = $lang_common['Normal icon'];
+				$item_status = '';
+				$icon_type = 'icon';
+
+
+				$subject = '<a href="viewtopic.php?id='.$search_set[$i]['tid'].'">'.pun_htmlspecialchars($search_set[$i]['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($search_set[$i]['poster']).'</span>';
+
+				if ($search_set[$i]['closed'] != '0')
+				{
+					$icon_text = $lang_common['Closed icon'];
+					$item_status = 'iclosed';
+				}
 
 				if (!$pun_user['is_guest'] && $search_set[$i]['last_post'] > $pun_user['last_visit'])
 				{
-					$icon = '<div class="inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
+					$icon_text .= ' '.$lang_common['New icon'];
+					$item_status .= ' inew';
+					$icon_type = 'icon inew';
 					$subject = '<strong>'.$subject.'</strong>';
-					$subject_new_posts = '[&nbsp;<a href="viewtopic.php?id='.$search_set[$i]['tid'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]';
+					$subject_new_posts = '<span class="newtext">[&nbsp;<a href="viewtopic.php?id='.$search_set[$i]['tid'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]</span>';
 				}
 				else
 					$subject_new_posts = null;
@@ -632,10 +636,10 @@
 				}
 
 ?>
-				<tr>
+				<tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>>
 					<td class="tcl">
 						<div class="intd">
-							<?php echo $icon ?>
+							<div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo trim($icon_text) ?></div></div>
 							<div class="tclcon">
 								<?php echo $subject."\n" ?>
 							</div>
@@ -683,10 +687,9 @@
 					<legend><?php echo $lang_search['Search criteria legend'] ?></legend>
 					<div class="infldset">
 						<input type="hidden" name="action" value="search" />
-						<p><?php echo $lang_search['Search info'] ?></p>
 						<label class="conl"><?php echo $lang_search['Keyword search'] ?><br /><input type="text" name="keywords" size="40" maxlength="100" /><br /></label>
 						<label class="conl"><?php echo $lang_search['Author search'] ?><br /><input id="author" type="text" name="author" size="25" maxlength="25" /><br /></label>
-						<div class="clearer"></div>
+						<p class="clearb"><?php echo $lang_search['Search info'] ?></p>
 					</div>
 				</fieldset>
 			</div>
@@ -694,7 +697,6 @@
 				<fieldset>
 					<legend><?php echo $lang_search['Search in legend'] ?></legend>
 					<div class="infldset">
-						<p><?php echo $lang_search['Search in info'] ?></p>
 						<label class="conl"><?php echo $lang_search['Forum search'] ?>
 						<br /><select id="forum" name="forum">
 <?php
@@ -730,7 +732,7 @@
 							<option value="topic"><?php echo $lang_search['Topic only'] ?></option>
 						</select>
 						<br /></label>
-						<div class="clearer"></div>
+						<p class="clearb"><?php echo $lang_search['Search in info'] ?></p>
 					</div>
 				</fieldset>
 			</div>
@@ -738,7 +740,6 @@
 				<fieldset>
 					<legend><?php echo $lang_search['Search results legend'] ?></legend>
 					<div class="infldset">
-					<p><?php echo $lang_search['Search results info'] ?></p>
 						<label class="conl"><?php echo $lang_search['Sort by'] ?>
 						<br /><select name="sort_by">
 							<option value="0"><?php echo $lang_search['Sort by post time'] ?></option>
@@ -759,7 +760,7 @@
 							<option value="posts"><?php echo $lang_search['Show as posts'] ?></option>
 						</select>
 						<br /></label>
-						<div class="clearer"></div>
+						<p class="clearb"><?php echo $lang_search['Search results info'] ?></p>
 					</div>
 				</fieldset>
 			</div>
diff -urN punbb-1.2/upload/style/Cobalt.css punbb-1.2.5/upload/style/Cobalt.css
--- punbb-1.2/upload/style/Cobalt.css	Fri Jan  7 18:44:38 2005
+++ punbb-1.2.5/upload/style/Cobalt.css	Wed Feb  2 02:01:52 2005
@@ -7,61 +7,56 @@
 /* Import the colour scheme */
 @import url(imports/Cobalt_cs.css);
 
-/****************************************************************/
-/* 2. TEXT SETTINGS */
-/****************************************************************/
-
-/* 2.1 This sets the default Font Group */
-
-.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
-	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
-}
-
-.pun {FONT-SIZE: 10px}
-
-/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
-/* End IE Win Font Size */
-
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
-/* 2.2 Set the font-size for preformatted text i.e in code boxes */
-
-.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
-
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
-
-/* 2.4 Larger text for particular items */
-
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
-
-
+/****************************************************************/
+/* 2. TEXT SETTINGS */
+/****************************************************************/
+
+/* 2.1 This sets the default Font Group */
+
+.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
+	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
+}
+
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
+
+/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
+* HTML .pun {FONT-SIZE: 68.75%}
+/* End IE Win Font Size */
+
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
+/* 2.2 Set the font-size for preformatted text i.e in code boxes */
+
+.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
+
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
+
+/* 2.4 Larger text for particular items */
+DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
+
+/* 2.5 Bold text */
+
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
+
 /****************************************************************/
 /* 3. LINKS */
 /****************************************************************/
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -187,7 +182,7 @@
 }
 
 P.multidelete {
-	PADDING-TOP: 10px;
+	PADDING-TOP: 15px;
 	PADDING-BOTTOM: 5px
 }
 
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/Lithium.css punbb-1.2.5/upload/style/Lithium.css
--- punbb-1.2/upload/style/Lithium.css	Fri Jan  7 18:44:54 2005
+++ punbb-1.2.5/upload/style/Lithium.css	Wed Feb  2 02:01:52 2005
@@ -6,51 +6,45 @@
 @import url(imports/base.css);
 /* Import the colour scheme */
 @import url(imports/Lithium_cs.css);
-
-/****************************************************************/
-/* 2. TEXT SETTINGS */
-/****************************************************************/
-
-/* 2.1 This sets the default Font Group */
-
-.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
-	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
-}
-
-.pun {FONT-SIZE: 10px}
-
-/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
-/* End IE Win Font Size */
-
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
-/* 2.2 Set the font-size for preformatted text i.e in code boxes */
-
-.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
-
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
-
-/* 2.4 Larger text for particular items */
-
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
-
+
+/****************************************************************/
+/* 2. TEXT SETTINGS */
+/****************************************************************/
+
+/* 2.1 This sets the default Font Group */
+
+.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
+	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
+}
+
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
+
+/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
+* HTML .pun {FONT-SIZE: 68.75%}
+/* End IE Win Font Size */
+
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
+/* 2.2 Set the font-size for preformatted text i.e in code boxes */
+
+.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
+
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
+
+/* 2.4 Larger text for particular items */
+DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
+
+/* 2.5 Bold text */
+
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
 
 /****************************************************************/
 /* 3. LINKS */
@@ -58,10 +52,11 @@
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -187,7 +182,7 @@
 }
 
 P.multidelete {
-	PADDING-TOP: 10px;
+	PADDING-TOP: 15px;
 	PADDING-BOTTOM: 5px
 }
 
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/Mercury.css punbb-1.2.5/upload/style/Mercury.css
--- punbb-1.2/upload/style/Mercury.css	Fri Jan  7 18:45:08 2005
+++ punbb-1.2.5/upload/style/Mercury.css	Wed Feb  2 02:01:52 2005
@@ -7,61 +7,56 @@
 /* Import the colour scheme */
 @import url(imports/Mercury_cs.css);
 
-/****************************************************************/
-/* 2. TEXT SETTINGS */
-/****************************************************************/
-
-/* 2.1 This sets the default Font Group */
-
-.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
-	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
-}
-
-.pun {FONT-SIZE: 10px}
-
-/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
-/* End IE Win Font Size */
-
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
-/* 2.2 Set the font-size for preformatted text i.e in code boxes */
-
-.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
-
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
-
-/* 2.4 Larger text for particular items */
-
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
-
-
+/****************************************************************/
+/* 2. TEXT SETTINGS */
+/****************************************************************/
+
+/* 2.1 This sets the default Font Group */
+
+.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
+	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
+}
+
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
+
+/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
+* HTML .pun {FONT-SIZE: 68.75%}
+/* End IE Win Font Size */
+
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
+/* 2.2 Set the font-size for preformatted text i.e in code boxes */
+
+.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
+
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
+
+/* 2.4 Larger text for particular items */
+DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
+
+/* 2.5 Bold text */
+
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
+
 /****************************************************************/
 /* 3. LINKS */
 /****************************************************************/
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -187,7 +182,7 @@
 }
 
 P.multidelete {
-	PADDING-TOP: 10px;
+	PADDING-TOP: 15px;
 	PADDING-BOTTOM: 5px
 }
 
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/Oxygen.css punbb-1.2.5/upload/style/Oxygen.css
--- punbb-1.2/upload/style/Oxygen.css	Fri Jan  7 18:44:16 2005
+++ punbb-1.2.5/upload/style/Oxygen.css	Wed Feb  2 02:01:52 2005
@@ -17,40 +17,34 @@
 	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
 }
 
-.pun {FONT-SIZE: 10px}
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
 
 /* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
+* HTML .pun {FONT-SIZE: 68.75%}
 /* End IE Win Font Size */
 
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
 /* 2.2 Set the font-size for preformatted text i.e in code boxes */
 
 .pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
 
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
 
 /* 2.4 Larger text for particular items */
+
DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
 
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
+/* 2.5 Bold text */
 
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
 
 /****************************************************************/
 /* 3. LINKS */
@@ -58,10 +52,11 @@
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/Radium.css punbb-1.2.5/upload/style/Radium.css
--- punbb-1.2/upload/style/Radium.css	Fri Jan  7 18:45:24 2005
+++ punbb-1.2.5/upload/style/Radium.css	Wed Feb  2 02:01:52 2005
@@ -7,61 +7,56 @@
 /* Import the colour scheme */
 @import url(imports/Radium_cs.css);
 
-/****************************************************************/
-/* 2. TEXT SETTINGS */
-/****************************************************************/
-
-/* 2.1 This sets the default Font Group */
-
-.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
-	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
-}
-
-.pun {FONT-SIZE: 10px}
-
-/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
-/* End IE Win Font Size */
-
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
-/* 2.2 Set the font-size for preformatted text i.e in code boxes */
-
-.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
-
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
-
-/* 2.4 Larger text for particular items */
-
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
-
-
+/****************************************************************/
+/* 2. TEXT SETTINGS */
+/****************************************************************/
+
+/* 2.1 This sets the default Font Group */
+
+.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
+	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
+}
+
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
+
+/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
+* HTML .pun {FONT-SIZE: 68.75%}
+/* End IE Win Font Size */
+
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
+/* 2.2 Set the font-size for preformatted text i.e in code boxes */
+
+.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
+
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
+
+/* 2.4 Larger text for particular items */
+DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
+
+/* 2.5 Bold text */
+
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
+
 /****************************************************************/
 /* 3. LINKS */
 /****************************************************************/
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -187,7 +182,7 @@
 }
 
 P.multidelete {
-	PADDING-TOP: 10px;
+	PADDING-TOP: 15px;
 	PADDING-BOTTOM: 5px
 }
 
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/Sulfur.css punbb-1.2.5/upload/style/Sulfur.css
--- punbb-1.2/upload/style/Sulfur.css	Fri Jan  7 19:46:46 2005
+++ punbb-1.2.5/upload/style/Sulfur.css	Wed Feb  2 02:01:52 2005
@@ -7,61 +7,56 @@
 /* Import the colour scheme */
 @import url(imports/Sulfur_cs.css);
 
-/****************************************************************/
-/* 2. TEXT SETTINGS */
-/****************************************************************/
-
-/* 2.1 This sets the default Font Group */
-
-.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
-	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
-}
-
-.pun {FONT-SIZE: 10px}
-
-/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
-* HTML BODY .pun {FONT-SIZE: 62.5%}
-/* End IE Win Font Size */
-
-/* Set font size for tables for IE5 */
-* HTML .pun TABLE {FONT-SIZE: 1em}
-
-/* 2.2 Set the font-size for preformatted text i.e in code boxes */
-
-.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
-
-/* 2.3 Font size for board title */
-
-#brdtitle H1 {FONT-SIZE: 1.5em}
-
-/* 2.4 Larger text for particular items */
-
-.pun H2, #viewprofile DL, #brdmenu, DIV.postmsg P, DIV.forminfo P, #puninstall DIV.block P, DIV.postsignature,
-DIV.linkst LI, P.postlink, DIV.postmsg H4 {FONT-SIZE: 1.1em}
-
-.pun H3, .pun PRE, DIV.postleft DT {FONT-SIZE: 1.2em}
-
-/* 2.5 Font sizes for form elements. */
-
-.pun TEXTAREA, .pun LEGEND, .pun LABEL, .pun INPUT, .pun SELECT, .pun OPTGROUP {FONT-SIZE: 1.1em}
-.pun LABEL INPUT, .pun LABEL TEXTAREA, .pun LABEL SELECT, .pun LABEL OPTGROUP {font-size: 1em}
-
-/* 2.6 Bold text */
-
-DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
-.blockmenu LI, #brdtitle H1 {FONT-WEIGHT: bold}
-
-
+/****************************************************************/
+/* 2. TEXT SETTINGS */
+/****************************************************************/
+
+/* 2.1 This sets the default Font Group */
+
+.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
+	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
+}
+
+.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}
+
+/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
+* HTML .pun {FONT-SIZE: 68.75%}
+/* End IE Win Font Size */
+
+/* Set font size for tables because IE requires it */
+.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}
+
+/* 2.2 Set the font-size for preformatted text i.e in code boxes */
+
+.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}
+
+/* 2.3 Font size for headers */
+
+.pun H2, .pun H4 {FONT-SIZE: 1em}
+.pun H3 {FONT-SIZE: 1.1em}
+#brdtitle H1 {FONT-SIZE: 1.4em}
+
+/* 2.4 Larger text for particular items */
+DIV.postmsg P {LINE-HEIGHT: 1.4}
+DIV.postleft DT {FONT-SIZE: 1.1em}
+.pun PRE {FONT-SIZE: 1.2em}
+
+/* 2.5 Bold text */
+
+DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
+DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}
+
 /****************************************************************/
 /* 3. LINKS */
 /****************************************************************/
 
 /* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */
 
-#brdmenu A:link, #brdmenu A:visited,
-.blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link, .blockpost H2 A:visited,
-.postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited, .blockmenu A:link, .blockmenu A:visited
-{TEXT-DECORATION: none}
+#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
+.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
+.blockmenu A:link, .blockmenu A:visited {
+	TEXT-DECORATION: none
+}
 
 /* 3.2 Underline on hover for links in headers and main menu */
 
@@ -97,7 +92,7 @@
 	BORDER-STYLE: solid;
 	BORDER-WIDTH: 1px
 }
-
+
 /****************************************************************/
 /* 5. VERTICAL AND PAGE SPACING */
 /****************************************************************/
@@ -226,7 +221,32 @@
 /* 9.5 Horizontal positioning for the submit button on forms */
 
 DIV.blockform P INPUT {MARGIN-LEFT: 12px}
-
+
+/****************************************************************/
+/* 10. POST STATUS INDICATORS */
+/****************************************************************/
+
+/* 10.1 These are the post status indicators which appear at the left of some tables. 
+.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
+.isticky = sticky topics. By default only .inew is different from the default.*/
+
+DIV.icon {
+	FLOAT: left;
+	MARGIN-TOP: 0.1em;
+	MARGIN-LEFT: 0.2em;
+	DISPLAY: block;
+	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
+	BORDER-STYLE: solid
+}
+
+DIV.searchposts DIV.icon {MARGIN-LEFT: 0}
+
+/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
+margin creates space for the post status indicator */
+
+TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+
+
 
 
 
diff -urN punbb-1.2/upload/style/imports/Cobalt_cs.css punbb-1.2.5/upload/style/imports/Cobalt_cs.css
--- punbb-1.2/upload/style/imports/Cobalt_cs.css	Fri Jan  7 15:45:22 2005
+++ punbb-1.2.5/upload/style/imports/Cobalt_cs.css	Tue Feb  1 17:16:46 2005
@@ -32,7 +32,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
 
 /* 1.7 Dark background for form elements */
 
@@ -99,35 +99,19 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #FF4000}
-A:hover.showhot {COLOR: #FF5010}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #FF4000}
+LI.maintenancelink A:hover {COLOR: #FF5010}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #383838 #383838 #383838 #383838}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
-DIV.inew {BORDER-COLOR: #5496D8 #4B85C0 #4377AC #4F8DCB}
-
-/* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
-margin creates space for the post status indicator */
-
-TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+DIV.icon {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
+TR.iredirect DIV.icon {BORDER-COLOR: #383838 #383838 #383838 #383838}
+DIV.inew {BORDER-COLOR: #5496D8 #4B85C0 #4377AC #4F8DCB}
\ No newline at end of file
diff -urN punbb-1.2/upload/style/imports/Lithium_cs.css punbb-1.2.5/upload/style/imports/Lithium_cs.css
--- punbb-1.2/upload/style/imports/Lithium_cs.css	Fri Jan  7 15:47:14 2005
+++ punbb-1.2.5/upload/style/imports/Lithium_cs.css	Tue Feb  1 17:16:46 2005
@@ -4,6 +4,8 @@
 
 /* 1.1 Default background colour and text colour */
 
+BODY {BACKGROUND-COLOR: #FFF}
+
 .pun {COLOR: #333}
 
 DIV.box, .pun BLOCKQUOTE, DIV.codebox, #adminconsole FIELDSET TH, .rowodd, .roweven {BACKGROUND-COLOR: #F1F1F1}
@@ -28,7 +30,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
 
 /****************************************************************/
 /* 2. POST BACKGROUNDS AND TEXT */
@@ -91,35 +93,19 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #B42000}
-A:hover.showhot {COLOR: #B42000}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #B42000}
+LI.maintenancelink A:hover {COLOR: #B42000}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
-
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
-DIV.inew {BORDER-COLOR: #8BB453 #7A9E48 #709142 #799C47}
-
-/* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
-margin creates space for the post status indicator */
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-TD DIV.tclcon {MARGIN-LEFT: 2.3em}
\ No newline at end of file
+DIV.icon {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
+TR.iredirect DIV.icon {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
+DIV.inew {BORDER-COLOR: #8BB453 #7A9E48 #709142 #799C47}
\ No newline at end of file
diff -urN punbb-1.2/upload/style/imports/Mercury_cs.css punbb-1.2.5/upload/style/imports/Mercury_cs.css
--- punbb-1.2/upload/style/imports/Mercury_cs.css	Fri Jan  7 15:48:36 2005
+++ punbb-1.2.5/upload/style/imports/Mercury_cs.css	Tue Feb  1 17:16:46 2005
@@ -32,7 +32,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
 
 /* 1.7 Dark background for form elements */
 
@@ -99,35 +99,19 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #FF4000}
-A:hover.showhot {COLOR: #FF5010}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #FF4000}
+LI.maintenancelink A:hover {COLOR: #FF5010}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #383838 #383838 #383838 #383838}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
-DIV.inew {BORDER-COLOR: #F6B620 #ECAE1F #D09A1B #E1A61D}
-
-/* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
-margin creates space for the post status indicator */
-
-TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+DIV.icon {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
+TR.iredirect DIV.icon {BORDER-COLOR: #383838 #383838 #383838 #383838}
+DIV.inew {BORDER-COLOR: #F6B620 #ECAE1F #D09A1B #E1A61D}
\ No newline at end of file
diff -urN punbb-1.2/upload/style/imports/Oxygen_cs.css punbb-1.2.5/upload/style/imports/Oxygen_cs.css
--- punbb-1.2/upload/style/imports/Oxygen_cs.css	Fri Jan  7 03:57:04 2005
+++ punbb-1.2.5/upload/style/imports/Oxygen_cs.css	Tue Feb  1 17:16:46 2005
@@ -4,6 +4,8 @@
 
 /* 1.1 Default background colour and text colour */
 
+BODY {BACKGROUND-COLOR: #FFF}
+
 .pun {COLOR: #333}
 
 DIV.box, .pun BLOCKQUOTE, DIV.codebox, #adminconsole FIELDSET TH, .rowodd, .roweven {BACKGROUND-COLOR: #F1F1F1}
@@ -28,7 +30,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
 
 /****************************************************************/
 /* 2. POST BACKGROUNDS AND TEXT */
@@ -91,35 +93,19 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #B42000}
-A:hover.showhot {COLOR: #B42000}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #B42000}
+LI.maintenancelink A:hover {COLOR: #B42000}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
-
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
-DIV.inew {BORDER-COLOR: #0080D7 #0065C0 #0058B3 #0072CA}
-
-/* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
-margin creates space for the post status indicator */
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+DIV.icon {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
+TR.iredirect DIV.icon {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
+DIV.inew {BORDER-COLOR: #0080D7 #0065C0 #0058B3 #0072CA}
\ No newline at end of file
diff -urN punbb-1.2/upload/style/imports/Radium_cs.css punbb-1.2.5/upload/style/imports/Radium_cs.css
--- punbb-1.2/upload/style/imports/Radium_cs.css	Fri Jan  7 15:49:12 2005
+++ punbb-1.2.5/upload/style/imports/Radium_cs.css	Tue Feb  1 17:16:46 2005
@@ -32,7 +32,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #D4D4D4}
 
 /* 1.7 Dark background for form elements */
 
@@ -99,32 +99,21 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #FF4000}
-A:hover.showhot {COLOR: #FF5010}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #FF4000}
+LI.maintenancelink A:hover {COLOR: #FF5010}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #383838 #383838 #383838 #383838}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
+DIV.icon {BORDER-COLOR: #484848 #404040 #3C3C3C #444444}
+TR.iredirect DIV.icon {BORDER-COLOR: #383838 #383838 #383838 #383838}
 DIV.inew {BORDER-COLOR: #60C860 #54AF54 #499849 #59B657}
 
 /* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
diff -urN punbb-1.2/upload/style/imports/Sulfur_cs.css punbb-1.2.5/upload/style/imports/Sulfur_cs.css
--- punbb-1.2/upload/style/imports/Sulfur_cs.css	Fri Jan  7 15:49:50 2005
+++ punbb-1.2.5/upload/style/imports/Sulfur_cs.css	Tue Feb  1 17:16:46 2005
@@ -4,6 +4,8 @@
 
 /* 1.1 Default background colour and text colour */
 
+BODY {BACKGROUND-COLOR: #FFF}
+
 .pun {COLOR: #333}
 
 DIV.box, .pun BLOCKQUOTE, DIV.codebox, #adminconsole FIELDSET TH, .rowodd, .roweven {BACKGROUND-COLOR: #F1F1F1}
@@ -28,7 +30,7 @@
 
 /* 1.6 Highlighted text for various items */
 
-.showhot, .pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
+.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}
 
 /****************************************************************/
 /* 2. POST BACKGROUNDS AND TEXT */
@@ -91,35 +93,19 @@
 
 /* 4.3 This is for closed topics and "hot" links */
 
-A:link.showclosed,  A:visited.showclosed {COLOR: #888}
-A:hover.showclosed {COLOR: #AAA}
-A:link.showhot,  A:visited.showhot {COLOR: #B42000}
-A:hover.showhot {COLOR: #B42000}
+LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
+LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
+LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #B42000}
+LI.maintenancelink A:hover {COLOR: #B42000}
 
 /****************************************************************/
 /* 5. POST STATUS INDICATORS */
 /****************************************************************/
 
-/* 5.1 These are the post status indicators which appear at the left of some tables. 
+/* These are the post status indicators which appear at the left of some tables. 
 .inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
-.inormal = everything else. By default only .inew and .inormal are visible.*/
-
-DIV.inew, DIV.inormal, DIV.iclosed, DIV.iredirect {
-	FLOAT: left;
-	MARGIN-TOP: 0.2em;
-	MARGIN-LEFT: 0.2em;
-	DISPLAY: block;
-	BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
-	BORDER-STYLE: solid
-}
-
-DIV.searchposts DIV.inew, DIV.searchposts DIV.inormal {MARGIN-LEFT: 0}
-
-DIV.iredirect {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
-DIV.inormal, DIV.iclosed {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
-DIV.inew {BORDER-COLOR: #C23000 #AF2C00 #992600 #AC2B00}
-
-/* 5.2 Class .tclcon is a div inside the first column of tables with post indicators. The
-margin creates space for the post status indicator */
+.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
 
-TD DIV.tclcon {MARGIN-LEFT: 2.3em}
+DIV.icon {BORDER-COLOR: #E6E6E6 #DEDEDE #DADADA #E2E2E2}
+TR.iredirect DIV.icon {BORDER-COLOR: #F1F1F1 #F1F1F1 #F1F1F1 #F1F1F1}
+DIV.inew {BORDER-COLOR: #C23000 #AF2C00 #992600 #AC2B00}
\ No newline at end of file
diff -urN punbb-1.2/upload/style/imports/base.css punbb-1.2.5/upload/style/imports/base.css
--- punbb-1.2/upload/style/imports/base.css	Sat Jan  8 01:45:20 2005
+++ punbb-1.2.5/upload/style/imports/base.css	Tue Feb  1 17:16:46 2005
@@ -18,7 +18,8 @@
 /****************************************************************/
 /* 2. STRUCTURAL SETTINGS - VERY IMPORTANT - DO NOT CHANGE */
 /****************************************************************/
-
+
+/* 2.1 Clearing floats and invisible items */
 .pun .clearer, .pun .nosize {
 	HEIGHT: 0;
 	WIDTH: 0;
@@ -29,14 +30,17 @@
 
 .pun .clearer, .pun .clearb {CLEAR: both}
 .pun .nosize {POSITION: absolute; LEFT: -10000px}
+
+/* 2.2 Overflow settings for posts */
+
+DIV.blockpost DIV.box, DIV.postleft, DIV.postsignature, DIV.postmsg {OVERFLOW: hidden}
 
 /****************************************************************/
 /* 3. BUG FIXES - VERY IMPORTANT - DO NOT CHANGE */
 /****************************************************************/
 
-/* 3.1 This fixes bugs in Gecko browsers. */
+/* 3.1 This attempts to eliminate rounding errors in Gecko browsers. */
 
-DIV>DIV>DIV.inbox , DIV>DIV>DIV.block2col {BORDER-BOTTOM: 1px solid transparent}
 DIV>DIV>DIV.postfootleft, DIV>DIV>DIV.postfootright {PADDING-TOP: 1px; MARGIN-TOP: -1px}
 
 /* 3.2 This is only visible to IE Windows and cures various bugs. Do not alter comments */
@@ -97,9 +101,11 @@
 
 /* 5.3 Keep breadcrumbs from shifting to the right when wrapping */
 
-.linkst UL {MARGIN-LEFT: 18em}
+.linkst UL, linksb UL, .postlinksb UL {MARGIN-LEFT: 18em}
 
 /* 5.4 Settings for Profile and Admin interface.*/
+
+DIV.block2col {PADDING-BOTTOM: 1px}
 
 DIV.block2col DIV.blockform, DIV.block2col DIV.block, #viewprofile DD {MARGIN-LEFT: 14em}
 
@@ -133,7 +139,7 @@
 
 .tcr {WIDTH: 32%; TEXT-ALIGN: left}
 
-#punsearch #vf .tcl {WIDTH: 41%}
+#punsearch #vf .tcl, #punmoderate #vf .tcl {WIDTH: 41%}
 
 #punsearch #vf .tc2 {WIDTH: 18%; TEXT-ALIGN: left}
 
@@ -151,9 +157,7 @@
 
 #debug .tcr {WIDTH: 85%; WHITE-SPACE: normal}
 
-/* 6.4 Give a little more height to table rows other than index */
-
-#vf TD, #users1 TD, #users2 TD {LINE-HEIGHT: 1.5em}
+#punindex TD.tcr SPAN.byuser {DISPLAY: block}
 
 /****************************************************************/
 /* 7. VIEWTOPIC SETUP */
@@ -173,6 +177,8 @@
 }
 
 DIV.postfootright, P.multidelete {TEXT-ALIGN: right}
+
+DIV.blockpost>DIV>DIV.inbox {PADDING-BOTTOM: 1px}
 
 /* 7.3 This is the div which actually contains the post and is inside .postright */
 
@@ -180,10 +186,10 @@
 
 /* 7.4 These items control overflow and scrolling within posts. */
 
-DIV.blockpost, DIV.postleft, DIV.postsignature, DIV.postmsg {OVERFLOW: hidden}
 DIV.incqbox {WIDTH: 100%; OVERFLOW: hidden}
 DIV.scrollbox {WIDTH: 100%; OVERFLOW: auto}
-* HTML .imgbox {WIDTH: auto}
+IMG.postimg {max-width: 100%}
+A .postimg {max-width: 100%}
 
 /* 7.5 Turn off the poster information column for preview */
 
@@ -199,16 +205,12 @@
 	BORDER:none
 }
 
-/* 7.7 Vertical alignment of smilies in posts and signatures */
-
-DIV.postsignature IMG, DIV.postmsg IMG {VERTICAL-ALIGN: middle;}
-
-/* 7.8 Maximum height for search results as posts. Position go to post link */
+/* 7.7 Maximum height for search results as posts. Position go to post link */
 
 DIV.searchposts DIV.postmsg {HEIGHT: 8em}
 DIV.searchposts DD P {PADDING-TOP: 3em}
 
-/* 7.9 Class for bbcode [u] */
+/* 7.8 Class for bbcode [u] */
 
 SPAN.bbu {TEXT-DECORATION: underline}
 
@@ -218,7 +220,8 @@
 
 /* 8.1 Horizontal display of online list, main navigation menu and breadcrumbs */
 
-#onlinelist DD, #onlinelist DT, #brdmenu LI, DIV.linkst LI, DIV.postfootright LI, UL.bblinks LI {
+#onlinelist DD, #onlinelist DT, #brdmenu LI, DIV.linkst LI, DIV.linksb LI, DIV.postlinksb LI,
+DIV.postfootright LI, UL.bblinks LI {
 	DISPLAY: inline;
 	HEIGHT: 0
 }
diff -urN punbb-1.2/upload/style/imports/minmax.js punbb-1.2.5/upload/style/imports/minmax.js
--- punbb-1.2/upload/style/imports/minmax.js	Thu Jan  1 00:00:00 1970
+++ punbb-1.2.5/upload/style/imports/minmax.js	Tue Feb  1 20:27:26 2005
@@ -0,0 +1,84 @@
+// minmax.js - written by Andrew Clover <and@doxdesk.com>
+// Adapted for PunBB by Rickard Andersson and Paul Sullivan
+
+/*@cc_on
+@if (@_win32 && @_jscript_version>4)
+
+var minmax_elements;
+
+function minmax_bind(el) {
+	var em, ms;
+	var st= el.style, cs= el.currentStyle;
+
+	if (minmax_elements==window.undefined) {
+		if (!document.body || !document.body.currentStyle) return;
+		minmax_elements= new Array();
+		window.attachEvent('onresize', minmax_delayout);
+	}
+
+	if (cs['max-width'])
+		st['maxWidth']= cs['max-width'];
+
+	ms= cs['maxWidth'];
+	if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') {
+		st.minmaxWidth= cs.width;
+		minmax_elements[minmax_elements.length]= el;
+		minmax_delayout();
+	}
+}
+
+var minmax_delaying= false;
+function minmax_delayout() {
+	if (minmax_delaying) return;
+	minmax_delaying= true;
+	window.setTimeout(minmax_layout, 0);
+}
+
+function minmax_stopdelaying() {
+	minmax_delaying= false;
+}
+
+function minmax_layout() {
+	window.setTimeout(minmax_stopdelaying, 100);
+	var i, el, st, cs, optimal, inrange;
+	for (i= minmax_elements.length; i-->0;) {
+		el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
+
+		st.width= st.minmaxWidth; optimal= el.offsetWidth;
+		inrange= true;
+		if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') {
+			st.width= cs.minWidth;
+			inrange= (el.offsetWidth<optimal);
+		}
+		if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') {
+			st.width= cs.maxWidth;
+			inrange= (el.offsetWidth>optimal);
+		}
+		if (inrange) st.width= st.minmaxWidth;
+	}
+}
+
+var minmax_SCANDELAY= 500;
+
+function minmax_scan() {
+	var el;
+	for (var i= 0; i<document.all.length; i++) {
+		el= document.all[i];
+		if (!el.minmax_bound) {
+			el.minmax_bound= true;
+			minmax_bind(el);
+		}
+	}
+}
+
+var minmax_scanner;
+function minmax_stop() {
+	window.clearInterval(minmax_scanner);
+	minmax_scan();
+}
+
+minmax_scan();
+minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
+window.attachEvent('onload', minmax_stop);
+
+@end @*/
diff -urN punbb-1.2/upload/userlist.php punbb-1.2.5/upload/userlist.php
--- punbb-1.2/upload/userlist.php	Mon Jan  3 00:26:42 2005
+++ punbb-1.2.5/upload/userlist.php	Thu Mar  3 02:08:18 2005
@@ -63,9 +63,8 @@
 			<fieldset>
 				<legend><?php echo $lang_ul['User find legend'] ?></legend>
 				<div class="infldset">
-<?php if ($pun_user['g_search_users'] == '1'): ?>				<p><?php echo $lang_ul['User search info'] ?></p>
-					<label class="conl"><?php echo $lang_common['Username'] ?><br /><input type="text" name="username" value="<?php echo pun_htmlspecialchars($username) ?>" size="25" maxlength="25" /><br /></label>
-<?php endif; ?>				<label class="conl"><?php echo $lang_ul['User group'] ?>
+<?php if ($pun_user['g_search_users'] == '1'): ?>					<label class="conl"><?php echo $lang_common['Username'] ?><br /><input type="text" name="username" value="<?php echo pun_htmlspecialchars($username) ?>" size="25" maxlength="25" /><br /></label>
+<?php endif; ?>					<label class="conl"><?php echo $lang_ul['User group']."\n" ?>
 					<br /><select name="show_group">
 						<option value="-1"<?php if ($show_group == -1) echo ' selected="selected"' ?>><?php echo $lang_ul['All users'] ?></option>
 <?php
@@ -82,21 +81,21 @@
 
 ?>
 					</select>
-					</label>
-					<label class="conl"><?php echo $lang_search['Sort by'] ?>
+					<br /></label>
+					<label class="conl"><?php echo $lang_search['Sort by']."\n" ?>
 					<br /><select name="sort_by">
 						<option value="username"<?php if ($sort_by == 'username') echo ' selected="selected"' ?>><?php echo $lang_common['Username'] ?></option>
 						<option value="registered"<?php if ($sort_by == 'registered') echo ' selected="selected"' ?>><?php echo $lang_common['Registered'] ?></option>
 <?php if ($show_post_count): ?>						<option value="num_posts"<?php if ($sort_by == 'num_posts') echo ' selected="selected"' ?>><?php echo $lang_ul['No of posts'] ?></option>
 <?php endif; ?>					</select>
-					</label>
-					<label class="conl"><?php echo $lang_search['Sort order'] ?>
+					<br /></label>
+					<label class="conl"><?php echo $lang_search['Sort order']."\n" ?>
 					<br /><select name="sort_dir">
 						<option value="ASC"<?php if ($sort_dir == 'ASC') echo ' selected="selected"' ?>><?php echo $lang_search['Ascending'] ?></option>
 						<option value="DESC"<?php if ($sort_dir == 'DESC') echo ' selected="selected"' ?>><?php echo $lang_search['Descending'] ?></option>
 					</select>
-					</label>
-					<div class="clearer"></div>
+					<br /></label>
+					<p class="clearb"><?php echo $lang_ul['User search info'] ?></p>
 				</div>
 			</fieldset>
 		</div>
@@ -117,7 +116,7 @@
 	$where_sql[] = 'u.group_id='.$show_group;
 
 // Fetch user count
-$result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users AS u'.(!empty($where_sql) ? ' WHERE '.implode(' AND ', $where_sql) : '')) or error('Unable to fetch user list count', __FILE__, __LINE__, $db->error());
+$result = $db->query('SELECT COUNT(id) FROM '.$db->prefix.'users AS u'.(!empty($where_sql) ? ' WHERE u.id>1 AND '.implode(' AND ', $where_sql) : '')) or error('Unable to fetch user list count', __FILE__, __LINE__, $db->error());
 $num_users = $db->result($result);
 
 
@@ -155,7 +154,7 @@
 <?php
 
 // Grab the users
-$result = $db->query('SELECT u.id, u.username, u.title, u.num_posts, u.registered, g.g_id, g.g_user_title FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE u.id>1'.(!empty($where_sql) ? ' AND '.implode(' AND ', $where_sql) : '').' ORDER BY '.$sort_by.' '.$sort_dir.' LIMIT '.$start_from.', 50') or error('Unable to fetch user list', __FILE__, __LINE__, $db->error());
+$result = $db->query('SELECT u.id, u.username, u.title, u.num_posts, u.registered, g.g_id, g.g_user_title FROM '.$db->prefix.'users AS u LEFT JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE u.id>1'.(!empty($where_sql) ? ' AND '.implode(' AND ', $where_sql) : '').' ORDER BY '.$sort_by.' '.$sort_dir.' LIMIT '.$start_from.', 50') or error('Unable to fetch user list', __FILE__, __LINE__, $db->error());
 if ($db->num_rows($result))
 {
 	while ($user_data = $db->fetch_assoc($result))
diff -urN punbb-1.2/upload/viewforum.php punbb-1.2.5/upload/viewforum.php
--- punbb-1.2/upload/viewforum.php	Sun Jan  2 00:56:30 2005
+++ punbb-1.2.5/upload/viewforum.php	Tue Feb  1 17:16:46 2005
@@ -55,22 +55,15 @@
 // Sort out who the moderators are and if we are currently a moderator (or an admin)
 $mods_array = array();
 if ($cur_forum['moderators'] != '')
-{
 	$mods_array = unserialize($cur_forum['moderators']);
 
-	while (list($mod_username, $mod_id) = @each($mods_array))
-		$temp_array[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';
-
-	$mods_string = implode(', ', $temp_array);
-}
-
 $is_admmod = ($pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_id'] == PUN_MOD && array_key_exists($pun_user['username'], $mods_array))) ? true : false;
 
 // Can we or can we not post new topics?
 if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1') || $cur_forum['post_topics'] == '1' || $is_admmod)
-	$post_link = '<a href="post.php?fid='.$id.'">'.$lang_forum['Post topic'].'</a>';
+	$post_link = "\t\t".'<p class="postlink conr"><a href="post.php?fid='.$id.'">'.$lang_forum['Post topic'].'</a></p>'."\n";
 else
-	$post_link = '&nbsp;';
+	$post_link = '';
 
 
 // Determine the topic offset (based on $_GET['p'])
@@ -91,7 +84,7 @@
 <div class="linkst">
 	<div class="inbox">
 		<p class="pagelink conl"><?php echo $paging_links ?></p>
-		<p class="postlink conr"><?php echo $post_link ?></p>
+<?php echo $post_link ?>
 		<ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><li>&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>
 		<div class="clearer"></div>
 	</div>
@@ -102,12 +95,6 @@
 	<div class="box">
 		<div class="inbox">
 			<table cellspacing="0">
-			<colgroup>
-				<col class="tcl" />
-				<col class="tc2" />
-				<col class="tc3" />
-				<col class="tcr" />
-			</colgroup>
 			<thead>
 				<tr>
 					<th class="tcl" scope="col"><?php echo $lang_common['Topic'] ?></th>
@@ -131,6 +118,7 @@
 	switch ($db_type)
 	{
 		case 'mysql':
+		case 'mysqli':
 			$sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.forum_id='.$id.' GROUP BY t.id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
 			break;
 
@@ -152,10 +140,12 @@
 {
 	while ($cur_topic = $db->fetch_assoc($result))
 	{
-		$icon = '<div class="inormal"><div class="nosize">'.$lang_common['Normal icon'].'</div></div>'."\n";
+		$icon_text = $lang_common['Normal icon'];
+		$item_status = '';
+		$icon_type = 'icon';
 
 		if ($cur_topic['moved_to'] == null)
-			$last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.format_time($cur_topic['last_post']).'</a> '.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['last_poster']);
+			$last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.format_time($cur_topic['last_post']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['last_poster']).'</span>';
 		else
 			$last_post = '&nbsp;';
 
@@ -168,16 +158,18 @@
 			$subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['poster']).'</span>';
 		else
 		{
-			$subject = '<a class="showclosed" href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['poster']).'</span>';
-			$icon = '<div class="iclosed"><div class="nosize">'.$lang_common['Closed icon'].'</div></div>'."\n";
+			$subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].'&nbsp;'.pun_htmlspecialchars($cur_topic['poster']).'</span>';
+			$icon_text = $lang_common['Closed icon'];
+			$item_status = 'iclosed';
 		}
 
 		if (!$pun_user['is_guest'] && $cur_topic['last_post'] > $pun_user['last_visit'] && $cur_topic['moved_to'] == null)
 		{
-			$icon = '<div class="inew"><div class="nosize">'.$lang_common['New icon'].'</div></div>'."\n";
-
+			$icon_text .= ' '.$lang_common['New icon'];
+			$item_status .= ' inew';
+			$icon_type = 'icon inew';
 			$subject = '<strong>'.$subject.'</strong>';
-			$subject_new_posts = '[&nbsp;<a href="viewtopic.php?id='.$cur_topic['id'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]';
+			$subject_new_posts = '<span class="newtext">[&nbsp;<a href="viewtopic.php?id='.$cur_topic['id'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a>&nbsp;]</span>';
 		}
 		else
 			$subject_new_posts = null;
@@ -192,8 +184,11 @@
 		}
 
 		if ($cur_topic['sticky'] == '1')
-			$subject = $lang_forum['Sticky'].': '.$subject;
-
+		{
+			$subject = '<span class="stickytext">'.$lang_forum['Sticky'].': </span>'.$subject;
+			$item_status .= ' isticky';
+			$icon_text .= ' '.$lang_forum['Sticky'];
+		}
 
 		$num_pages_topic = ceil(($cur_topic['num_replies'] + 1) / $pun_user['disp_posts']);
 
@@ -210,10 +205,10 @@
 		}
 
 ?>
-				<tr>
+				<tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>>
 					<td class="tcl">
 						<div class="intd">
-							<?php echo $icon ?>
+							<div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo trim($icon_text) ?></div></div>
 							<div class="tclcon">
 								<?php echo $subject."\n" ?>
 							</div>
@@ -248,8 +243,8 @@
 <div class="linksb">
 	<div class="inbox">
 		<p class="pagelink conl"><?php echo $lang_common['Pages'].': '.paginate($num_pages, $p, 'viewforum.php?id='.$id) ?></p>
-		<p class="postlink conr"><?php echo $post_link ?></p>
-		<p><?php echo (!empty($mods_array)) ? $lang_common['Moderated by'].' '.$mods_string : '&nbsp;' ?></p>
+<?php echo $post_link ?>
+		<ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a>&nbsp;</li><li>&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>
 		<div class="clearer"></div>
 	</div>
 </div>
diff -urN punbb-1.2/upload/viewtopic.php punbb-1.2.5/upload/viewtopic.php
--- punbb-1.2/upload/viewtopic.php	Fri Jan  7 16:12:04 2005
+++ punbb-1.2.5/upload/viewtopic.php	Thu Apr  7 22:52:56 2005
@@ -139,14 +139,11 @@
 	$cur_topic['subject'] = censor_words($cur_topic['subject']);
 
 
-$page_title = pun_htmlspecialchars($pun_config['o_board_title'].' / '.$cur_topic['subject']);
-
 $quickpost = false;
 if ($pun_config['o_quickpost'] == '1' &&
-	$is_admmod ||
-	(!$pun_user['is_guest'] &&
+	!$pun_user['is_guest'] &&
 	($cur_topic['post_replies'] == '1' || ($cur_topic['post_replies'] == '' && $pun_user['g_post_replies'] == '1')) &&
-	$cur_topic['closed'] == '0'))
+	($cur_topic['closed'] == '0' || $is_admmod))
 {
 	$required_fields = array('req_message' => $lang_common['Message']);
 	$quickpost = true;
@@ -156,13 +153,14 @@
 {
 	if ($cur_topic['is_subscribed'])
 		// I apologize for the variable naming here. It's a mix of subscription and action I guess :-)
-		$subscraction = $lang_topic['Is subscribed'].' - <a href="misc.php?unsubscribe='.$id.'">'.$lang_topic['Unsubscribe'].'</a>';
+		$subscraction = '<p class="subscribelink clearb">'.$lang_topic['Is subscribed'].' - <a href="misc.php?unsubscribe='.$id.'">'.$lang_topic['Unsubscribe'].'</a></p>'."\n";
 	else
-		$subscraction = '<a href="misc.php?subscribe='.$id.'">'.$lang_topic['Subscribe'].'</a>';
+		$subscraction = '<p class="subscribelink clearb"><a href="misc.php?subscribe='.$id.'">'.$lang_topic['Subscribe'].'</a></p>'."\n";
 }
 else
-	$subscraction = '&nbsp;';
+	$subscraction = '<div class="clearer"></div>'."\n";
 
+$page_title = pun_htmlspecialchars($pun_config['o_board_title'].' / '.$cur_topic['subject']);
 define('PUN_ALLOW_INDEX', 1);
 require PUN_ROOT.'header.php';
 
@@ -185,7 +183,7 @@
 $post_count = 0;	// Keep track of post numbers
 
 // Retrieve the posts (and their respective poster/online status)
-$result = $db->query('SELECT DISTINCT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.idle=0) WHERE p.topic_id='.$id.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
+$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.idle=0) WHERE p.topic_id='.$id.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 while ($cur_post = $db->fetch_assoc($result))
 {
 	$post_count++;
@@ -206,7 +204,7 @@
 			$user_title = censor_words($user_title);
 
 		// Format the online indicator
-		$is_online = ($cur_post['is_online'] == $cur_post['poster_id']) ? '<strong class="showhot">'.$lang_topic['Online'].'</strong>' : $lang_topic['Offline'];
+		$is_online = ($cur_post['is_online'] == $cur_post['poster_id']) ? '<strong>'.$lang_topic['Online'].'</strong>' : $lang_topic['Offline'];
 
 		if ($pun_config['o_avatars'] == '1' && $cur_post['use_avatar'] == '1' && $pun_user['show_avatars'] != '0')
 		{
@@ -271,24 +269,24 @@
 	if (!$is_admmod)
 	{
 		if (!$pun_user['is_guest'])
-			$post_actions[] = '<li><a class="showclosed" href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>';
+			$post_actions[] = '<li class="postreport"><a href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>';
 
 		if ($cur_topic['closed'] == '0')
 		{
 			if ($cur_post['poster_id'] == $pun_user['id'])
 			{
 				if ((($start_from + $post_count) == 1 && $pun_user['g_delete_topics'] == '1') || (($start_from + $post_count) > 1 && $pun_user['g_delete_posts'] == '1'))
-					$post_actions[] = '<li><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>';
+					$post_actions[] = '<li class="postdelete"><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>';
 				if ($pun_user['g_edit_posts'] == '1')
-					$post_actions[] = '<li><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>';
+					$post_actions[] = '<li class="postedit"><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>';
 			}
 
 			if (($cur_topic['post_replies'] == '' && $pun_user['g_post_replies'] == '1') || $cur_topic['post_replies'] == '1')
-				$post_actions[] = '<li><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Quote'].'</a>';
+				$post_actions[] = '<li class="postquote"><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Quote'].'</a>';
 		}
 	}
 	else
-		$post_actions[] = '<li><a class="showclosed" href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>'.$lang_topic['Link separator'].'</li><li><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>'.$lang_topic['Link separator'].'</li><li><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>'.$lang_topic['Link separator'].'</li><li><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Quote'].'</a>';
+		$post_actions[] = '<li class="postreport"><a href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>'.$lang_topic['Link separator'].'</li><li class="postdelete"><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>'.$lang_topic['Link separator'].'</li><li class="postedit"><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>'.$lang_topic['Link separator'].'</li><li class="postquote"><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Quote'].'</a>';
 
 
 	// Switch the background color for every message.
@@ -330,8 +328,8 @@
 				<div class="postmsg">
 					<?php echo $cur_post['message']."\n" ?>
 <?php if ($cur_post['edited'] != '') echo "\t\t\t\t\t".'<p class="postedit"><em>'.$lang_topic['Last edit'].' '.pun_htmlspecialchars($cur_post['edited_by']).' ('.format_time($cur_post['edited']).')</em></p>'."\n"; ?>
-<?php if ($signature != '') echo "\t\t\t\t\t".'<div class="postsignature"><hr />'.$signature.'</div>'."\n"; ?>
 				</div>
+<?php if ($signature != '') echo "\t\t\t\t".'<div class="postsignature"><hr />'.$signature.'</div>'."\n"; ?>
 			</div>
 			<div class="clearer"></div>
 			<div class="postfootleft"><?php if ($cur_post['poster_id'] > 1) echo '<p>'.$is_online.'</p>'; ?></div>
@@ -349,8 +347,8 @@
 	<div class="inbox">
 		<p class="postlink conr"><?php echo $post_link ?></p>
 		<p class="pagelink conl"><?php echo $paging_links ?></p>
-		<p><?php echo $subscraction ?></p>
-		<div class="clearer"></div>
+		<ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a></li><li>&nbsp;&raquo;&nbsp;<a href="viewforum.php?id=<?php echo $cur_topic['forum_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['forum_name']) ?></a></li><li>&nbsp;&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_topic['subject']) ?></li></ul>
+		<?php echo $subscraction ?>
 	</div>
 </div>
 
