diff --git a/upload/admin_options.php b/upload/admin_options.php
index b571ab3..24323e4 100644
--- a/upload/admin_options.php
+++ b/upload/admin_options.php
@@ -567,7 +567,7 @@ generate_admin_menu('options');
 								</tr>
 								<tr>
 									<th scope="row"><?php echo $lang_admin_options['Default feed label'] ?></th>
-                                    <td>
+									<td>
 										<input type="radio" name="form[feed_type]" value="0"<?php if ($pun_config['o_feed_type'] == '0') echo ' checked="checked"' ?> />&nbsp;<strong><?php echo $lang_admin_options['None'] ?></strong>&nbsp;&nbsp;&nbsp;<input type="radio" name="form[feed_type]" value="1"<?php if ($pun_config['o_feed_type'] == '1') echo ' checked="checked"' ?> />&nbsp;<strong><?php echo $lang_admin_options['RSS'] ?></strong>&nbsp;&nbsp;&nbsp;<input type="radio" name="form[feed_type]" value="2"<?php if ($pun_config['o_feed_type'] == '2') echo ' checked="checked"' ?> />&nbsp;<strong><?php echo $lang_admin_options['Atom'] ?></strong>
 										<span><?php echo $lang_admin_options['Default feed help'] ?></span>
 									</td>
diff --git a/upload/db_update.php b/upload/db_update.php
index d75b792..6cf36eb 100644
--- a/upload/db_update.php
+++ b/upload/db_update.php
@@ -7,8 +7,9 @@
  */
 
 // The FluxBB version this script updates to
-define('UPDATE_TO', '1.4-rc2');
+define('UPDATE_TO', '1.4-rc3');
 define('UPDATE_TO_DB_REVISION', 5);
+
 define('MIN_PHP_VERSION', '4.3.0');
 define('MIN_MYSQL_VERSION', '4.1.2');
 define('MIN_PGSQL_VERSION', '7.0.0');
@@ -130,6 +131,9 @@ while ($cur_config_item = $db->fetch_row($result))
 if (isset($pun_config['o_database_revision']) && $pun_config['o_database_revision'] >= UPDATE_TO_DB_REVISION && version_compare($pun_config['o_cur_version'], UPDATE_TO, '>='))
 	exit('Your database is already as up-to-date as this script can make it.');
 
+$default_style = $pun_config['o_default_style'];
+if (!file_exists(PUN_ROOT.'style/'.$default_style.'.css'))
+	$default_style = 'Air';
 
 //
 // Determines whether $str is UTF-8 encoded or not
@@ -425,7 +429,7 @@ switch ($stage)
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>FluxBB Database Update</title>
-<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_config['o_default_style'] ?>.css" />
+<link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
 </head>
 <body>
 
@@ -809,6 +813,107 @@ if (strpos($cur_version, '1.2') === 0)
 		// Change the search_data field to mediumtext
 		$db->alter_field('search_cache', 'search_data', 'MEDIUMTEXT', true) or error('Unable to alter search_data field', __FILE__, __LINE__, $db->error());
 
+		// Incase we had the fulltext search extension installed (1.3-legacy), remove it
+		$db->drop_index('topics', 'subject_idx') or error('Unable to drop subject_idx index', __FILE__, __LINE__, $db->error());
+		$db->drop_index('posts', 'message_idx') or error('Unable to drop message_idx index', __FILE__, __LINE__, $db->error());
+
+		// If the search_cache table has been dropped by the fulltext search extension, recreate it
+		if (!$db->table_exists('search_cache'))
+		{
+			$schema = array(
+				'FIELDS'		=> array(
+					'id'			=> array(
+						'datatype'		=> 'INT(10) UNSIGNED',
+						'allow_null'	=> false,
+						'default'		=> '0'
+					),
+					'ident'			=> array(
+						'datatype'		=> 'VARCHAR(200)',
+						'allow_null'	=> false,
+						'default'		=> '\'\''
+					),
+					'search_data'	=> array(
+						'datatype'		=> 'MEDIUMTEXT',
+						'allow_null'	=> true
+					)
+				),
+				'PRIMARY KEY'	=> array('id'),
+				'INDEXES'		=> array(
+					'ident_idx'	=> array('ident')
+				)
+			);
+
+			if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
+				$schema['INDEXES']['ident_idx'] = array('ident(8)');
+
+			$db->create_table('search_cache', $schema);
+		}
+
+		// If the search_matches table has been dropped by the fulltext search extension, recreate it
+		if (!$db->table_exists('search_matches'))
+		{
+			$schema = array(
+				'FIELDS'		=> array(
+					'post_id'		=> array(
+						'datatype'		=> 'INT(10) UNSIGNED',
+						'allow_null'	=> false,
+						'default'		=> '0'
+					),
+					'word_id'		=> array(
+						'datatype'		=> 'INT(10) UNSIGNED',
+						'allow_null'	=> false,
+						'default'		=> '0'
+					),
+					'subject_match'	=> array(
+						'datatype'		=> 'TINYINT(1)',
+						'allow_null'	=> false,
+						'default'		=> '0'
+					)
+				),
+				'INDEXES'		=> array(
+					'word_id_idx'	=> array('word_id'),
+					'post_id_idx'	=> array('post_id')
+				)
+			);
+
+			$db->create_table('search_matches', $schema);
+		}
+
+		// If the search_words table has been dropped by the fulltext search extension, recreate it
+		if (!$db->table_exists('search_words'))
+		{
+			$schema = array(
+				'FIELDS'		=> array(
+					'id'			=> array(
+						'datatype'		=> 'SERIAL',
+						'allow_null'	=> false
+					),
+					'word'			=> array(
+						'datatype'		=> 'VARCHAR(20)',
+						'allow_null'	=> false,
+						'default'		=> '\'\'',
+						'collation'		=> 'bin'
+					)
+				),
+				'PRIMARY KEY'	=> array('word'),
+				'INDEXES'		=> array(
+					'id_idx'	=> array('id')
+				)
+			);
+
+			if ($db_type == 'sqlite')
+			{
+				$schema['PRIMARY KEY'] = array('id');
+				$schema['UNIQUE KEYS'] = array('word_idx'	=> array('word'));
+			}
+
+			$db->create_table('search_words', $schema);
+		}
+
+		// Change the default style if the old doesn't exist anymore
+		if ($pun_config['o_default_style'] != $default_style)
+			$db->query('UPDATE '.$db->prefix.'config SET conf_value = \''.$db->escape($default_style).'\' WHERE conf_name = \'o_default_style\'') or error('Unable to update default style config', __FILE__, __LINE__, $db->error());
+
 		// Should we do charset conversion or not?
 		if (strpos($cur_version, '1.2') === 0 && isset($_GET['convert_charset']))
 			$query_str = '?stage=conv_bans&req_old_charset='.$old_charset;
@@ -1287,7 +1392,7 @@ if (strpos($cur_version, '1.2') === 0)
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>FluxBB Database Update</title>
-<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_config['o_default_style'] ?>.css" />
+<link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
 </head>
 <body>
 
diff --git a/upload/delete.php b/upload/delete.php
index aeb2b7b..69868ac 100644
--- a/upload/delete.php
+++ b/upload/delete.php
@@ -94,8 +94,8 @@ $cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smili
 		<form method="post" action="delete.php?id=<?php echo $id ?>">
 			<div class="inform">
 				<p><strong><?php echo $lang_delete['Warning'] ?></strong></p>
-				<p><strong><?php echo $lang_common['Author'] ?></strong>: <?php echo pun_htmlspecialchars($cur_post['poster']) ?></p>
-				<p><strong><?php echo $lang_common['Message'] ?></strong>:</p>
+				<p><strong><?php printf($lang_delete['Author'], '</strong>'.pun_htmlspecialchars($cur_post['poster'])) ?></p>
+				<p><strong><?php echo $lang_common['Message'] ?></strong></p>
 				<div class="deletemsg">
 					<div class="postmsg">
 						<?php echo $cur_post['message']."\n" ?>
diff --git a/upload/edit.php b/upload/edit.php
index 0ba119c..e08e402 100644
--- a/upload/edit.php
+++ b/upload/edit.php
@@ -196,9 +196,9 @@ else if (isset($_POST['preview']))
 <?php endif; ?>						<label class="required"><strong><?php echo $lang_common['Message'] ?> <span><?php echo $lang_common['Required'] ?></span></strong><br />
 						<textarea name="req_message" rows="20" cols="95" tabindex="<?php echo $cur_index++ ?>"><?php echo pun_htmlspecialchars(isset($_POST['req_message']) ? $message : $cur_post['message']) ?></textarea><br /></label>
 						<ul class="bblinks">
-							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a>: <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a>: <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a>: <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
 						</ul>
 					</div>
 				</fieldset>
diff --git a/upload/footer.php b/upload/footer.php
index d59b728..4575702 100644
--- a/upload/footer.php
+++ b/upload/footer.php
@@ -149,7 +149,7 @@ if (defined('PUN_DEBUG'))
 	// Calculate script generation time
 	$time_diff = sprintf('%.3f', get_microtime() - $pun_start);
 	echo '<p id="debugtime">[ '.sprintf($lang_common['Querytime'], $time_diff, $db->get_num_queries()).' - Memory usage: '.
-	     file_size(memory_get_usage()).', Peak: '.file_size(memory_get_peak_usage()).' ]</p>'."\n";
+		 file_size(memory_get_usage()).', Peak: '.file_size(memory_get_peak_usage()).' ]</p>'."\n";
 }
 
 
diff --git a/upload/header.php b/upload/header.php
index e304dbc..258b588 100644
--- a/upload/header.php
+++ b/upload/header.php
@@ -181,7 +181,7 @@ if ($pun_user['is_guest'])
 	$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".'<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>';
+	$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>'.sprintf($lang_common['Last visit'], format_time($pun_user['last_visit'])).'</li>';
 
 	if ($pun_user['is_admmod'])
 	{
diff --git a/upload/help.php b/upload/help.php
index 85a37b8..765e20f 100644
--- a/upload/help.php
+++ b/upload/help.php
@@ -26,7 +26,7 @@ define('PUN_ACTIVE_PAGE', 'help');
 require PUN_ROOT.'header.php';
 
 ?>
-<h2><span><?php echo $lang_common['BBCode'] ?></span></h2>
+<h2><span><?php echo $lang_help['BBCode'] ?></span></h2>
 <div class="box">
 	<div class="inbox">
 		<p><a name="bbcode"></a><?php echo $lang_help['BBCode info 1'] ?></p>
@@ -66,7 +66,7 @@ require PUN_ROOT.'header.php';
 		<p><code>[quote=James]<?php echo $lang_help['Quote text'] ?>[/quote]</code></p>
 		<p><?php echo $lang_help['produces quote box'] ?></p>
 		<div class="postmsg">
-			<div class="quotebox"><cite>James <?php echo $lang_common['wrote'] ?>:</cite><blockquote><div><p><?php echo $lang_help['Quote text'] ?></p></div></blockquote></div>
+			<div class="quotebox"><cite>James <?php echo $lang_common['wrote'] ?></cite><blockquote><div><p><?php echo $lang_help['Quote text'] ?></p></div></blockquote></div>
 		</div>
 		<p><?php echo $lang_help['Quotes info 2'] ?></p>
 		<p><code>[quote]<?php echo $lang_help['Quote text'] ?>[/quote]</code></p>
@@ -113,7 +113,7 @@ require PUN_ROOT.'header.php';
 		<p><code>[b][u]<?php echo $lang_help['Bold, underlined text'] ?>[/u][/b]</code> <?php echo $lang_help['produces'] ?> <strong><span class="bbu"><?php echo $lang_help['Bold, underlined text'] ?></span></strong></p>
 	</div>
 </div>
-<h2><span><?php echo $lang_common['Smilies'] ?></span></h2>
+<h2><span><?php echo $lang_help['Smilies'] ?></span></h2>
 <div class="box">
 	<div class="inbox">
 		<p><a name="smilies"></a><?php echo $lang_help['Smilies info'] ?></p>
diff --git a/upload/include/common.php b/upload/include/common.php
index 697ad56..46d990f 100644
--- a/upload/include/common.php
+++ b/upload/include/common.php
@@ -10,7 +10,7 @@ if (!defined('PUN_ROOT'))
 	exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.');
 
 // Define the version and database revision that this code was written for
-define('FORUM_VERSION', '1.4-rc2');
+define('FORUM_VERSION', '1.4-rc3');
 define('FORUM_DB_REVISION', 5);
 
 // Block prefetch requests
diff --git a/upload/include/functions.php b/upload/include/functions.php
index 68d65d3..d66298e 100644
--- a/upload/include/functions.php
+++ b/upload/include/functions.php
@@ -454,7 +454,7 @@ function generate_navlinks()
 			// Insert any additional links into the $links array (at the correct index)
 			$num_links = count($extra_links[1]);
 			for ($i = 0; $i < $num_links; ++$i)
-				array_splice($links, $extra_links[1][$i], 0, array('<li id="navextra'.($i + 1).'">'.$extra_links[2][$i])).'</li>';
+				array_splice($links, $extra_links[1][$i], 0, array('<li id="navextra'.($i + 1).'">'.$extra_links[2][$i].'</li>'));
 		}
 	}
 
diff --git a/upload/include/parser.php b/upload/include/parser.php
index 32b488a..9397e8a 100644
--- a/upload/include/parser.php
+++ b/upload/include/parser.php
@@ -683,7 +683,7 @@ function do_bbcode($text, $is_signature = false)
 	if (strpos($text, '[quote') !== false)
 	{
 		$text = preg_replace('#\[quote\]\s*#', '</p><div class="quotebox"><blockquote><div><p>', $text);
-		$text = preg_replace('#\[quote=(&quot;|"|\'|)(.*?)\\1\]#se', '"</p><div class=\"quotebox\"><cite>".str_replace(array(\'[\', \'\\"\'), array(\'&#91;\', \'"\'), \'$2\')." ".$lang_common[\'wrote\'].":</cite><blockquote><div><p>"', $text);
+		$text = preg_replace('#\[quote=(&quot;|"|\'|)(.*?)\\1\]#se', '"</p><div class=\"quotebox\"><cite>".str_replace(array(\'[\', \'\\"\'), array(\'&#91;\', \'"\'), \'$2\')." ".$lang_common[\'wrote\']."</cite><blockquote><div><p>"', $text);
 		$text = preg_replace('#\s*\[\/quote\]#S', '</p></div></blockquote></div><p>', $text);
 	}
 
diff --git a/upload/include/utf8/mbstring/core.php b/upload/include/utf8/mbstring/core.php
index 1a88e32..bea1c32 100644
--- a/upload/include/utf8/mbstring/core.php
+++ b/upload/include/utf8/mbstring/core.php
@@ -10,10 +10,6 @@
 if (!defined('UTF8_CORE'))
 	define('UTF8_CORE', true);
 
-// utf8_strpos() and utf8_strrpos() need utf8_bad_strip() to strip invalid
-// characters. Mbstring doesn't do this while the Native implementation does.
-require_once UTF8.'/utils/bad.php';
-
 /**
 * Wrapper round mb_strlen
 * Assumes you have mb_internal_encoding to UTF-8 already
diff --git a/upload/include/utf8/native/core.php b/upload/include/utf8/native/core.php
index c0001ed..58636f5 100644
--- a/upload/include/utf8/native/core.php
+++ b/upload/include/utf8/native/core.php
@@ -98,11 +98,11 @@ function utf8_strrpos($str, $needle, $offset = false)
 
 		if (count($ar) > 1)
 		{
-		    // Pop off the end of the string where the last match was made
-		    array_pop($ar);
-		    $str = join($needle, $ar);
+			// Pop off the end of the string where the last match was made
+			array_pop($ar);
+			$str = join($needle, $ar);
 
-		    return utf8_strlen($str);
+			return utf8_strlen($str);
 		}
 
 		return false;
diff --git a/upload/include/utf8/utf8.php b/upload/include/utf8/utf8.php
index e1923f5..281f18c 100644
--- a/upload/include/utf8/utf8.php
+++ b/upload/include/utf8/utf8.php
@@ -37,6 +37,10 @@ if (extension_loaded('mbstring') && !defined('UTF8_USE_MBSTRING') && !defined('U
 else
 	define('UTF8_USE_NATIVE', true);
 
+// utf8_strpos() and utf8_strrpos() need utf8_bad_strip() to strip invalid
+// characters. Mbstring doesn't do this while the Native implementation does.
+require UTF8.'/utils/bad.php';
+
 if (defined('UTF8_USE_MBSTRING'))
 {
 	/**
diff --git a/upload/include/utf8/utils/bad.php b/upload/include/utf8/utils/bad.php
index c461251..78e9d17 100644
--- a/upload/include/utf8/utils/bad.php
+++ b/upload/include/utf8/utils/bad.php
@@ -266,10 +266,10 @@ define('UTF8_BAD_SEQINCOMPLETE', 7);
 */
 function utf8_bad_identify($str, &$i)
 {
-	$mState = 0;     // Cached expected number of octets after the current octet
-	                 // until the beginning of the next UTF8 character sequence
-	$mUcs4  = 0;     // Cached Unicode character
-	$mBytes = 1;     // Cached expected number of octets in the current sequence
+	$mState = 0;	// Cached expected number of octets after the current octet
+					// until the beginning of the next UTF8 character sequence
+	$mUcs4  = 0;	// Cached Unicode character
+	$mBytes = 1;	// Cached expected number of octets in the current sequence
 
 	$len = strlen($str);
 
diff --git a/upload/include/utf8/utils/unicode.php b/upload/include/utf8/utils/unicode.php
index 7568fe0..f0e86cb 100644
--- a/upload/include/utf8/utils/unicode.php
+++ b/upload/include/utf8/utils/unicode.php
@@ -36,10 +36,10 @@
 */
 function utf8_to_unicode($str)
 {
-	$mState = 0; // Cached expected number of octets after the current octet
-	             // until the beginning of the next UTF8 character sequence
-	$mUcs4  = 0; // Cached Unicode character
-	$mBytes = 1; // Cached expected number of octets in the current sequence
+	$mState = 0;	// Cached expected number of octets after the current octet
+					// until the beginning of the next UTF8 character sequence
+	$mUcs4  = 0;	// Cached Unicode character
+	$mBytes = 1;	// Cached expected number of octets in the current sequence
 
 	$out = array();
 	$len = strlen($str);
diff --git a/upload/include/utf8/utils/validation.php b/upload/include/utf8/utils/validation.php
index 8dca1f9..90dce8e 100644
--- a/upload/include/utf8/utils/validation.php
+++ b/upload/include/utf8/utils/validation.php
@@ -31,10 +31,10 @@
 */
 function utf8_is_valid($str)
 {
-	$mState = 0;     // Cached expected number of octets after the current octet
-	                 // until the beginning of the next UTF8 character sequence
-	$mUcs4  = 0;     // Cached Unicode character
-	$mBytes = 1;     // Cached expected number of octets in the current sequence
+	$mState = 0;	// Cached expected number of octets after the current octet
+					// until the beginning of the next UTF8 character sequence
+	$mUcs4  = 0;	// Cached Unicode character
+	$mBytes = 1;	// Cached expected number of octets in the current sequence
 
 	$len = strlen($str);
 
diff --git a/upload/index.php b/upload/index.php
index f1ee1f7..5e71bdd 100644
--- a/upload/index.php
+++ b/upload/index.php
@@ -188,13 +188,13 @@ else
 		<div class="inbox">
 			<dl class="conr">
 				<dt><strong><?php echo $lang_index['Board stats'] ?></strong></dt>
-				<dd><?php echo $lang_index['No of users'].': <strong>'.forum_number_format($stats['total_users']) ?></strong></dd>
-				<dd><?php echo $lang_index['No of topics'].': <strong>'.forum_number_format($stats['total_topics']) ?></strong></dd>
-				<dd><?php echo $lang_index['No of posts'].': <strong>'.forum_number_format($stats['total_posts']) ?></strong></dd>
+				<dd><?php printf($lang_index['No of users'], '<strong>'.forum_number_format($stats['total_users']).'</strong>') ?></dd>
+				<dd><?php printf($lang_index['No of topics'], '<strong>'.forum_number_format($stats['total_topics']).'</strong>') ?></dd>
+				<dd><?php printf($lang_index['No of posts'], '<strong>'.forum_number_format($stats['total_posts']).'</strong>') ?></dd>
 			</dl>
 			<dl class="conl">
 				<dt><strong><?php echo $lang_index['User info'] ?></strong></dt>
-				<dd><?php echo $lang_index['Newest user'] ?>: <?php echo $stats['newest_user'] ?></dd>
+				<dd><?php printf($lang_index['Newest user'], $stats['newest_user']) ?></dd>
 <?php
 
 if ($pun_config['o_users_online'] == '1')
@@ -218,11 +218,11 @@ if ($pun_config['o_users_online'] == '1')
 	}
 
 	$num_users = count($users);
-	echo "\t\t\t\t".'<dd>'. $lang_index['Users online'].': <strong>'.forum_number_format($num_users).'</strong></dd>'."\n\t\t\t\t".'<dd>'.$lang_index['Guests online'].': <strong>'.forum_number_format($num_guests).'</strong></dd>'."\n\t\t\t".'</dl>'."\n";
+	echo "\t\t\t\t".'<dd>'.sprintf($lang_index['Users online'], '<strong>'.forum_number_format($num_users).'</strong>').'</dd>'."\n\t\t\t\t".'<dd>'.sprintf($lang_index['Guests online'], '<strong>'.forum_number_format($num_guests).'</strong>').'</dd>'."\n\t\t\t".'</dl>'."\n";
 
 
 	if ($num_users > 0)
-		echo "\t\t\t".'<dl id="onlinelist" class="clearb">'."\n\t\t\t\t".'<dt><strong>'.$lang_index['Online'].':</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'].' </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";
 
diff --git a/upload/install.php b/upload/install.php
index 007eb08..6a6585e 100644
--- a/upload/install.php
+++ b/upload/install.php
@@ -7,8 +7,9 @@
  */
 
 // The FluxBB version this script installs
-define('FORUM_VERSION', '1.4-rc2');
+define('FORUM_VERSION', '1.4-rc3');
 define('FORUM_DB_REVISION', 5);
+
 define('MIN_PHP_VERSION', '4.3.0');
 define('MIN_MYSQL_VERSION', '4.1.2');
 define('MIN_PGSQL_VERSION', '7.0.0');
@@ -174,7 +175,7 @@ function process_form(the_form)
 
 	if (document.all || document.getElementById)
 	{
-		for (i = 0; i < the_form.length; ++i)
+		for (var i = 0; i < the_form.length; ++i)
 		{
 			var elem = the_form.elements[i]
 			if (elem.name && elem.name.substring(0, 4) == "req_")
@@ -610,7 +611,7 @@ else
 	if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
 		$schema['INDEXES']['username_idx'] = array('username(25)');
 
-	$db->create_table('bans', $schema);
+	$db->create_table('bans', $schema) or error('Unable to create bans table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -633,7 +634,7 @@ else
 		'PRIMARY KEY'	=> array('id')
 	);
 
-	$db->create_table('categories', $schema);
+	$db->create_table('categories', $schema) or error('Unable to create categories table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -656,7 +657,7 @@ else
 		'PRIMARY KEY'	=> array('id')
 	);
 
-	$db->create_table('censoring', $schema);
+	$db->create_table('censoring', $schema) or error('Unable to create censoring table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -674,7 +675,7 @@ else
 		'PRIMARY KEY'	=> array('conf_name')
 	);
 
-	$db->create_table('config', $schema);
+	$db->create_table('config', $schema) or error('Unable to create config table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -708,7 +709,7 @@ else
 		'PRIMARY KEY'	=> array('group_id', 'forum_id')
 	);
 
-	$db->create_table('forum_perms', $schema);
+	$db->create_table('forum_perms', $schema) or error('Unable to create forum_perms table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -775,7 +776,7 @@ else
 		'PRIMARY KEY'	=> array('id')
 	);
 
-	$db->create_table('forums', $schema);
+	$db->create_table('forums', $schema) or error('Unable to create forums table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -892,7 +893,7 @@ else
 		'PRIMARY KEY'	=> array('g_id')
 	);
 
-	$db->create_table('groups', $schema);
+	$db->create_table('groups', $schema) or error('Unable to create groups table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -945,7 +946,7 @@ else
 	if ($db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
 		$schema['ENGINE'] = 'InnoDB';
 
-	$db->create_table('online', $schema);
+	$db->create_table('online', $schema) or error('Unable to create online table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1007,7 +1008,7 @@ else
 		)
 	);
 
-	$db->create_table('posts', $schema);
+	$db->create_table('posts', $schema) or error('Unable to create posts table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1030,7 +1031,7 @@ else
 		'PRIMARY KEY'	=> array('id')
 	);
 
-	$db->create_table('ranks', $schema);
+	$db->create_table('ranks', $schema) or error('Unable to create ranks table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1083,7 +1084,7 @@ else
 		)
 	);
 
-	$db->create_table('reports', $schema);
+	$db->create_table('reports', $schema) or error('Unable to create reports table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1112,7 +1113,7 @@ else
 	if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
 		$schema['INDEXES']['ident_idx'] = array('ident(8)');
 
-	$db->create_table('search_cache', $schema);
+	$db->create_table('search_cache', $schema) or error('Unable to create search_cache table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1139,7 +1140,7 @@ else
 		)
 	);
 
-	$db->create_table('search_matches', $schema);
+	$db->create_table('search_matches', $schema) or error('Unable to create search_matches table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1167,7 +1168,7 @@ else
 		$schema['UNIQUE KEYS'] = array('word_idx'	=> array('word'));
 	}
 
-	$db->create_table('search_words', $schema);
+	$db->create_table('search_words', $schema) or error('Unable to create search_words table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1186,7 +1187,7 @@ else
 		'PRIMARY KEY'	=> array('user_id', 'topic_id')
 	);
 
-	$db->create_table('subscriptions', $schema);
+	$db->create_table('subscriptions', $schema) or error('Unable to create subscriptions table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1268,7 +1269,7 @@ else
 		)
 	);
 
-	$db->create_table('topics', $schema);
+	$db->create_table('topics', $schema) or error('Unable to create topics table', __FILE__, __LINE__, $db->error());
 
 
 	$schema = array(
@@ -1472,7 +1473,7 @@ else
 	if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
 		$schema['UNIQUE KEYS']['username_idx'] = array('username(25)');
 
-	$db->create_table('users', $schema);
+	$db->create_table('users', $schema) or error('Unable to create users table', __FILE__, __LINE__, $db->error());
 
 
 	$now = time();
@@ -1540,7 +1541,7 @@ else
 		'o_avatars_dir'				=> "'img/avatars'",
 		'o_avatars_width'			=> "'60'",
 		'o_avatars_height'			=> "'60'",
-		'o_avatars_size'			=> "'102400'",
+		'o_avatars_size'			=> "'10240'",
 		'o_search_all_forums'		=> "'1'",
 		'o_base_url'				=> "'".$db->escape($base_url)."'",
 		'o_admin_email'				=> "'".$email."'",
diff --git a/upload/lang/English/admin_bans.php b/upload/lang/English/admin_bans.php
index fe4c979..b2c7631 100644
--- a/upload/lang/English/admin_bans.php
+++ b/upload/lang/English/admin_bans.php
@@ -4,7 +4,7 @@
 $lang_admin_bans = array(
 
 'No user message'			=>	'No user by that username registered. If you want to add a ban not tied to a specific username just leave the username blank.',
-'No user ID message'			=>	'No user by that ID registered.',
+'No user ID message'		=>	'No user by that ID registered.',
 'User is admin message'		=>	'The user %s is an administrator and can\'t be banned. If you want to ban an administrator, you must first demote him/her to moderator or user.',
 'Must enter message'		=>	'You must enter either a username, an IP address or an email address (at least).',
 'Cannot ban guest message'	=>	'The guest user cannot be banned.',
@@ -26,15 +26,15 @@ $lang_admin_bans = array(
 'Ban search subhead'		=>	'Enter search criteria',
 'Ban search info'			=>	'Search for bans in the database. You can enter one or more terms to search for. Wildcards in the form of asterisks (*) are accepted.',
 'Date help'					=>	'(yyyy-mm-dd)',
-'Message label'			=>	'Message',
-'Expire after label'	=>	'Expire after',
-'Expire before label'	=>	'Expire before',
+'Message label'				=>	'Message',
+'Expire after label'		=>	'Expire after',
+'Expire before label'		=>	'Expire before',
 'Order by label'			=>	'Order by',
 'Order by username'			=>	'Username',
-'Order by ip'			        =>	'IP',
+'Order by ip'				=>	'IP',
 'Order by e-mail'			=>	'Email',
 'Order by expire'			=>	'Expire date',
-'Ascending'				=>	'Ascending',
+'Ascending'					=>	'Ascending',
 'Descending'				=>	'Descending',
 'Submit search'				=>	'Submit search',
 
@@ -54,15 +54,15 @@ $lang_admin_bans = array(
 'Expire date label'			=>	'Expire date',
 'Expire date help'			=>	'The date when this ban should be automatically removed (format: yyyy-mm-dd). Leave blank to remove manually.',
 
-'Results head'			=>	'Search Results',
+'Results head'				=>	'Search Results',
 'Results username head'		=>	'Username',
 'Results e-mail head'		=>	'Email',
 'Results IP address head'	=>	'IP/IP-ranges',
-'Results expire head'	        =>	'Expires',
-'Results message head'	        =>	'Message',
-'Results banned by head'        =>	'Banned by',
+'Results expire head'		=>	'Expires',
+'Results message head'		=>	'Message',
+'Results banned by head'	=>	'Banned by',
 'Results actions head'		=>	'Actions',
-'No match'			=>	'No match',
-'Unknown'			=>	'Unknown',
+'No match'					=>	'No match',
+'Unknown'					=>	'Unknown',
 
 );
diff --git a/upload/lang/English/admin_ranks.php b/upload/lang/English/admin_ranks.php
index 836f5b3..7dca408 100644
--- a/upload/lang/English/admin_ranks.php
+++ b/upload/lang/English/admin_ranks.php
@@ -2,6 +2,7 @@
 
 // Language definitions used in admin_ranks.php
 $lang_admin_ranks = array(
+
 'Must be integer message'	=>	'Minimum posts must be a positive integer value.',
 'Dupe min posts message'	=>	'There is already a rank with a minimun posts value of %s.',
 'Must enter title message'	=>	'You must enter a rank title.',
diff --git a/upload/lang/English/common.php b/upload/lang/English/common.php
index ff7bc1c..aaade9a 100644
--- a/upload/lang/English/common.php
+++ b/upload/lang/English/common.php
@@ -80,15 +80,14 @@ $lang_common = array(
 'Forum'								=>	'Forum',
 'Posts'								=>	'Posts',
 'Replies'							=>	'Replies',
-'Author'							=>	'Author',
 'Pages'								=>	'Pages:',
 'Page'								=>	'Page %s',
-'BBCode'							=>	'BBCode', // You probably shouldn't change this
-'img tag'							=>	'[img] tag',
-'Smilies'							=>	'Smilies',
+'BBCode'							=>	'BBCode:', // You probably shouldn't change this
+'img tag'							=>	'[img] tag:',
+'Smilies'							=>	'Smilies:',
 'and'								=>	'and',
 'Image link'						=>	'image', // This is displayed (i.e. <image>) instead of images when "Show images" is disabled in the profile
-'wrote'								=>	'wrote', // For [quote]'s
+'wrote'								=>	'wrote:', // For [quote]'s
 'Mailer'							=>	'Mailer', // As in "MyForums Mailer" in the signature of outgoing emails
 'Important information'				=>	'Important information',
 'Write message legend'				=>	'Write your message and submit',
@@ -125,7 +124,7 @@ $lang_common = array(
 'Logout'							=>	'Logout',
 'Logged in as'						=>	'Logged in as',
 'Admin'								=>	'Administration',
-'Last visit'						=>	'Last visit',
+'Last visit'						=>	'Last visit: %s',
 'Show new posts'					=>	'Show new posts since last visit',
 'Mark all as read'					=>	'Mark all topics as read',
 'Mark forum read'					=>	'Mark this forum as read',
diff --git a/upload/lang/English/delete.php b/upload/lang/English/delete.php
index 496848a..29f358b 100644
--- a/upload/lang/English/delete.php
+++ b/upload/lang/English/delete.php
@@ -5,6 +5,7 @@ $lang_delete = array(
 
 'Delete post'			=>	'Delete post',
 'Warning'				=>	'Warning! If this is the first post in the topic, the whole topic will be deleted.',
+'Author'				=>	'Author: %s',
 'Delete'				=>	'Delete', // The submit button
 'Post del redirect'		=>	'Post deleted. Redirecting …',
 'Topic del redirect'	=>	'Topic deleted. Redirecting …'
diff --git a/upload/lang/English/help.php b/upload/lang/English/help.php
index 808993b..2f39682 100644
--- a/upload/lang/English/help.php
+++ b/upload/lang/English/help.php
@@ -6,6 +6,7 @@ $lang_help = array(
 'Help'					=>	'Help',
 'produces'				=>	'produces',
 
+'BBCode'				=>	'BBCode',
 'BBCode info 1'			=>	'BBCode is a collection of formatting tags that are used to change the look of text in this forum. BBCode is based on the same principal as, and is very similar to, HTML. Below is a list of all the available BBCodes and instructions on how to use them.',
 'BBCode info 2'			=>	'Administrators have the ability to enable or disable BBCode. You can tell if BBCode is enabled or disabled out in the left margin whenever you post a message or edit your signature.',
 
@@ -48,6 +49,7 @@ $lang_help = array(
 'produces decimal list'	=>	'produces a numbered list.',
 'produces alpha list'	=>	'produces an alphabetically labelled list.',
 
+'Smilies'				=>	'Smilies',
 'Smilies info'			=>	'If you like (and if it is enabled), the forum can convert a series of smilies to images representations of that smiley. This forum recognizes the following smilies and replaces them with images:'
 
 );
diff --git a/upload/lang/English/index.php b/upload/lang/English/index.php
index 4a2f954..0ed222a 100644
--- a/upload/lang/English/index.php
+++ b/upload/lang/English/index.php
@@ -6,13 +6,13 @@ $lang_index = array(
 'Topics'		=>	'Topics',
 'Link to'		=>	'Link to:', // As in "Link to: http://fluxbb.org/"
 'Empty board'	=>	'Board is empty.',
-'Newest user'	=>	'Newest registered user',
-'Users online'	=>	'Registered users online',
-'Guests online'	=>	'Guests online',
-'No of users'	=>	'Total number of registered users',
-'No of topics'	=>	'Total number of topics',
-'No of posts'	=>	'Total number of posts',
-'Online'		=>	'Online', // As in "Online: User A, User B etc."
+'Newest user'	=>	'Newest registered user: %s',
+'Users online'	=>	'Registered users online: %s',
+'Guests online'	=>	'Guests online: %s',
+'No of users'	=>	'Total number of registered users: %s',
+'No of topics'	=>	'Total number of topics: %s',
+'No of posts'	=>	'Total number of posts: %s',
+'Online'		=>	'Online:', // As in "Online: User A, User B etc."
 'Board info'	=>	'Board information',
 'Board stats'	=>	'Board statistics',
 'User info'		=>	'User information'
diff --git a/upload/lang/English/misc.php b/upload/lang/English/misc.php
index 1bf51e3..9ccd4b2 100644
--- a/upload/lang/English/misc.php
+++ b/upload/lang/English/misc.php
@@ -85,6 +85,6 @@ $lang_misc = array(
 // Get host
 'Host info 1'					=>	'The IP address is: %s',
 'Host info 2'					=>	'The host name is: %s',
-'Show more users'		        =>	'Show more users for this IP',
+'Show more users'				=>	'Show more users for this IP',
 
 );
diff --git a/upload/lang/English/prof_reg.php b/upload/lang/English/prof_reg.php
index 29fbf46..9a69b41 100644
--- a/upload/lang/English/prof_reg.php
+++ b/upload/lang/English/prof_reg.php
@@ -13,7 +13,6 @@ $lang_prof_reg = array(
 'Date format'				=>	'Date format',
 'Default'					=>	'Default',
 'Language'					=>	'Language',
-'Language info'				=>	'You can choose which language you wish to use to view the forum.',
 'Email setting info'		=>	'Select whether you want your email address to be viewable to other users or not and if you want other users to be able to send you email via the forum (form email) or not.',
 'Email setting 1'			=>	'Display your email address.',
 'Email setting 2'			=>	'Hide your email address but allow form email.',
diff --git a/upload/lang/English/profile.php b/upload/lang/English/profile.php
index 33c896b..ef6a98c 100644
--- a/upload/lang/English/profile.php
+++ b/upload/lang/English/profile.php
@@ -72,6 +72,11 @@ $lang_profile = array(
 'Unknown'						=>	'(Unknown)', // This is displayed when a user hasn't filled out profile field (e.g. Location)
 'Private'						=>	'(Private)', // This is displayed when a user does not want to receive emails
 'No avatar'						=>	'(No avatar)',
+'Username info'					=>	'Username: %s',
+'Email info'					=>	'Email: %s',
+'Posts info'					=>	'Posts: %s',
+'Registered info'				=>	'Registered: %s',
+'Last post info'				=>	'Last post: %s',
 'Show posts'					=>	'Show all posts',
 'Realname'						=>	'Real name',
 'Location'						=>	'Location',
@@ -83,8 +88,7 @@ $lang_profile = array(
 'Yahoo'							=>	'Yahoo! Messenger',
 'Avatar'						=>	'Avatar',
 'Signature'						=>	'Signature',
-'Sig max length'				=>	'Max length',
-'Sig max lines'					=>	'Max lines',
+'Sig max size'					=>	'Max length: %s characters / Max lines: %s',
 'Avatar legend'					=>	'Set your avatar display options',
 'Avatar info'					=>	'An avatar is a small image that will be displayed with all your posts. You can upload an avatar by clicking the link below.',
 'Change avatar'					=>	'Change avatar',
diff --git a/upload/lang/English/topic.php b/upload/lang/English/topic.php
index f4da9cd..e5317e9 100644
--- a/upload/lang/English/topic.php
+++ b/upload/lang/English/topic.php
@@ -10,6 +10,7 @@ $lang_topic = array(
 'Note'			=>	'Note:', // Admin note
 'Posts'			=>	'Posts:',
 'Registered'	=>	'Registered:',
+'Replies'		=>	'Replies:',
 'Website'		=>	'Website',
 'Guest'			=>	'Guest',
 'Online'		=>	'Online',
diff --git a/upload/post.php b/upload/post.php
index 0108777..1c0f556 100644
--- a/upload/post.php
+++ b/upload/post.php
@@ -367,7 +367,7 @@ if ($tid)
 			$quote = '[quote='.$q_poster.']'.$q_message.'[/quote]'."\n";
 		}
 		else
-			$quote = '> '.$q_poster.' '.$lang_common['wrote'].':'."\n\n".'> '.$q_message."\n";
+			$quote = '> '.$q_poster.' '.$lang_common['wrote']."\n\n".'> '.$q_message."\n";
 	}
 }
 // If a forum ID was specified in the url (new topic)
@@ -492,9 +492,9 @@ if ($fid): ?>
 <?php endif; ?>						<label class="required"><strong><?php echo $lang_common['Message'] ?> <span><?php echo $lang_common['Required'] ?></span></strong><br />
 						<textarea name="req_message" rows="20" cols="95" tabindex="<?php echo $cur_index++ ?>"><?php echo isset($_POST['req_message']) ? pun_htmlspecialchars($message) : (isset($quote) ? $quote : ''); ?></textarea><br /></label>
 						<ul class="bblinks">
-							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a>: <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a>: <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a>: <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
 						</ul>
 					</div>
 				</fieldset>
diff --git a/upload/profile.php b/upload/profile.php
index 3871ab5..a3bc7db 100644
--- a/upload/profile.php
+++ b/upload/profile.php
@@ -990,17 +990,17 @@ if ($pun_user['id'] != $id &&
 				<legend><?php echo $lang_profile['Section personal'] ?></legend>
 					<div class="infldset">
 						<dl>
-							<dt><?php echo $lang_common['Username'] ?>: </dt>
+							<dt><?php echo $lang_common['Username'] ?></dt>
 							<dd><?php echo pun_htmlspecialchars($user['username']) ?></dd>
-							<dt><?php echo $lang_common['Title'] ?>: </dt>
+							<dt><?php echo $lang_common['Title'] ?></dt>
 							<dd><?php echo ($pun_config['o_censoring'] == '1') ? censor_words($user_title_field) : $user_title_field; ?></dd>
-							<dt><?php echo $lang_profile['Realname'] ?>: </dt>
+							<dt><?php echo $lang_profile['Realname'] ?></dt>
 							<dd><?php echo ($user['realname'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['realname']) : $user['realname']) : $lang_profile['Unknown']; ?></dd>
-							<dt><?php echo $lang_profile['Location'] ?>: </dt>
+							<dt><?php echo $lang_profile['Location'] ?></dt>
 							<dd><?php echo ($user['location'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['location']) : $user['location']) : $lang_profile['Unknown']; ?></dd>
-							<dt><?php echo $lang_profile['Website'] ?>: </dt>
+							<dt><?php echo $lang_profile['Website'] ?></dt>
 							<dd><?php echo $url ?></dd>
-							<dt><?php echo $lang_common['Email'] ?>: </dt>
+							<dt><?php echo $lang_common['Email'] ?></dt>
 							<dd><?php echo $email_field ?></dd>
 						</dl>
 						<div class="clearer"></div>
@@ -1012,15 +1012,15 @@ if ($pun_user['id'] != $id &&
 				<legend><?php echo $lang_profile['Section messaging'] ?></legend>
 					<div class="infldset">
 						<dl>
-							<dt><?php echo $lang_profile['Jabber'] ?>: </dt>
+							<dt><?php echo $lang_profile['Jabber'] ?></dt>
 							<dd><?php echo ($user['jabber'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['jabber']) : $user['jabber']) : $lang_profile['Unknown']; ?></dd>
-							<dt><?php echo $lang_profile['ICQ'] ?>: </dt>
+							<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>
+							<dt><?php echo $lang_profile['MSN'] ?></dt>
 							<dd><?php echo ($user['msn'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['msn']) : $user['msn']) : $lang_profile['Unknown']; ?></dd>
-							<dt><?php echo $lang_profile['AOL IM'] ?>: </dt>
+							<dt><?php echo $lang_profile['AOL IM'] ?></dt>
 							<dd><?php echo ($user['aim'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['aim']) : $user['aim']) : $lang_profile['Unknown']; ?></dd>
-							<dt><?php echo $lang_profile['Yahoo'] ?>: </dt>
+							<dt><?php echo $lang_profile['Yahoo'] ?></dt>
 							<dd><?php echo ($user['yahoo'] !='') ? pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['yahoo']) : $user['yahoo']) : $lang_profile['Unknown']; ?></dd>
 						</dl>
 						<div class="clearer"></div>
@@ -1032,9 +1032,9 @@ if ($pun_user['id'] != $id &&
 				<legend><?php echo $lang_profile['Section personality'] ?></legend>
 					<div class="infldset">
 						<dl>
-<?php if ($pun_config['o_avatars'] == '1'): ?>							<dt><?php echo $lang_profile['Avatar'] ?>: </dt>
+<?php if ($pun_config['o_avatars'] == '1'): ?>							<dt><?php echo $lang_profile['Avatar'] ?></dt>
 							<dd><?php echo $avatar_field ?></dd>
-<?php endif; if ($pun_config['o_signatures'] == '1'): ?>							<dt><?php echo $lang_profile['Signature'] ?>: </dt>
+<?php endif; if ($pun_config['o_signatures'] == '1'): ?>							<dt><?php echo $lang_profile['Signature'] ?></dt>
 							<dd><?php echo isset($parsed_signature) ? '<div class="postsignature postmsg">'.$parsed_signature.'</div>' : $lang_profile['No sig']; ?></dd>
 <?php endif; ?>						</dl>
 						<div class="clearer"></div>
@@ -1046,11 +1046,11 @@ if ($pun_user['id'] != $id &&
 				<legend><?php echo $lang_profile['User activity'] ?></legend>
 					<div class="infldset">
 						<dl>
-<?php if ($posts_field != ''): ?>							<dt><?php echo $lang_common['Posts'] ?>: </dt>
+<?php if ($posts_field != ''): ?>							<dt><?php echo $lang_common['Posts'] ?></dt>
 							<dd><?php echo $posts_field ?></dd>
-<?php endif; ?>							<dt><?php echo $lang_common['Last post'] ?>: </dt>
+<?php endif; ?>							<dt><?php echo $lang_common['Last post'] ?></dt>
 							<dd><?php echo $last_post ?></dd>
-							<dt><?php echo $lang_common['Registered'] ?>: </dt>
+							<dt><?php echo $lang_common['Registered'] ?></dt>
 							<dd><?php echo format_time($user['registered'], true) ?></dd>
 						</dl>
 						<div class="clearer"></div>
@@ -1074,7 +1074,7 @@ else
 			if ($pun_user['g_id'] == PUN_ADMIN || $pun_user['g_mod_rename_users'] == '1')
 				$username_field = '<input type="hidden" name="old_username" value="'.pun_htmlspecialchars($user['username']).'" /><label class="required"><strong>'.$lang_common['Username'].' <span>'.$lang_common['Required'].'</span></strong><br /><input type="text" name="req_username" value="'.pun_htmlspecialchars($user['username']).'" size="25" maxlength="25" /><br /></label>'."\n";
 			else
-				$username_field = '<p>'.$lang_common['Username'].': '.pun_htmlspecialchars($user['username']).'</p>'."\n";
+				$username_field = '<p>'.sprintf($lang_profile['Username info'], pun_htmlspecialchars($user['username'])).'</p>'."\n";
 
 			$email_field = '<label class="required"><strong>'.$lang_common['Email'].' <span>'.$lang_common['Required'].'</span></strong><br /><input type="text" name="req_email" value="'.$user['email'].'" size="40" maxlength="80" /><br /></label><p><span class="email"><a href="misc.php?email='.$id.'">'.$lang_common['Send email'].'</a></span></p>'."\n";
 		}
@@ -1083,7 +1083,7 @@ else
 			$username_field = '<p>'.$lang_common['Username'].': '.pun_htmlspecialchars($user['username']).'</p>'."\n";
 
 			if ($pun_config['o_regs_verify'] == '1')
-				$email_field = '<p>'.$lang_common['Email'].': '.$user['email'].' - <a href="profile.php?action=change_email&amp;id='.$id.'">'.$lang_profile['Change email'].'</a></p>'."\n";
+				$email_field = '<p>'.sprintf($lang_profile['Email info'], $user['email'].' - <a href="profile.php?action=change_email&amp;id='.$id.'">'.$lang_profile['Change email'].'</a>').'</p>'."\n";
 			else
 				$email_field = '<label class="required"><strong>'.$lang_common['Email'].' <span>'.$lang_common['Required'].'</span></strong><br /><input type="text" name="req_email" value="'.$user['email'].'" size="40" maxlength="80" /><br /></label>'."\n";
 		}
@@ -1092,7 +1092,7 @@ else
 		if ($pun_user['g_id'] == PUN_ADMIN)
 			$posts_field = '<label>'.$lang_common['Posts'].'<br /><input type="text" name="num_posts" value="'.$user['num_posts'].'" size="8" maxlength="8" /><br /></label><p><a href="search.php?action=show_user&amp;user_id='.$id.'">'.$lang_profile['Show posts'].'</a></p>'."\n";
 		else if ($pun_config['o_show_post_count'] == '1' || $pun_user['is_admmod'])
-			$posts_field = '<p>'.$lang_common['Posts'].': '.forum_number_format($user['num_posts']).($pun_user['g_search'] == '1' ? ' - <a href="search.php?action=show_user&amp;user_id='.$id.'">'.$lang_profile['Show posts'].'</a>' : '').'</p>'."\n";
+			$posts_field = '<p>'.sprintf($lang_profile['Posts info'], forum_number_format($user['num_posts']).($pun_user['g_search'] == '1' ? ' - <a href="search.php?action=show_user&amp;user_id='.$id.'">'.$lang_profile['Show posts'].'</a>' : '')).'</p>'."\n";
 		else if ($pun_user['g_search'] == '1')
 			$posts_field = '<p><a href="search.php?action=show_user&amp;user_id='.$id.'">'.$lang_profile['Show posts'].'</a></p>'."\n";
 
@@ -1231,7 +1231,7 @@ else
 			natsort($languages);
 
 ?>
-							<label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?>
+							<label><?php echo $lang_prof_reg['Language'] ?>
 							<br /><select name="form[language]">
 <?php
 
@@ -1258,8 +1258,8 @@ else
 					<fieldset>
 						<legend><?php echo $lang_profile['User activity'] ?></legend>
 						<div class="infldset">
-							<p><?php echo $lang_common['Registered'] ?>: <?php echo format_time($user['registered'], true); if ($pun_user['is_admmod']) echo ' (<a href="moderate.php?get_host='.pun_htmlspecialchars($user['registration_ip']).'">'.pun_htmlspecialchars($user['registration_ip']).'</a>)'; ?></p>
-							<p><?php echo $lang_common['Last post'] ?>: <?php echo $last_post ?></p>
+							<p><?php printf($lang_profile['Registered info'], format_time($user['registered'], true).(($pun_user['is_admmod']) ? ' (<a href="moderate.php?get_host='.pun_htmlspecialchars($user['registration_ip']).'">'.pun_htmlspecialchars($user['registration_ip']).'</a>)' : '')) ?></p>
+							<p><?php printf($lang_profile['Last post info'], $last_post) ?></p>
 							<?php echo $posts_field ?>
 <?php if ($pun_user['is_admmod']): ?>							<label><?php echo $lang_profile['Admin note'] ?><br />
 							<input id="admin_note" type="text" name="admin_note" value="<?php echo pun_htmlspecialchars($user['admin_note']) ?>" size="30" maxlength="30" /><br /></label>
@@ -1389,13 +1389,13 @@ else
 						<div class="infldset">
 							<p><?php echo $lang_profile['Signature info'] ?></p>
 							<div class="txtarea">
-								<label><?php echo $lang_profile['Sig max length'] ?>: <?php echo forum_number_format($pun_config['p_sig_length']) ?> / <?php echo $lang_profile['Sig max lines'] ?>: <?php echo $pun_config['p_sig_lines'] ?><br />
+								<label><?php printf($lang_profile['Sig max size'], forum_number_format($pun_config['p_sig_length']), $pun_config['p_sig_lines']) ?><br />
 								<textarea name="signature" rows="4" cols="65"><?php echo pun_htmlspecialchars($user['signature']) ?></textarea><br /></label>
 							</div>
 							<ul class="bblinks">
-								<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a>: <?php echo ($pun_config['p_sig_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-								<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a>: <?php echo ($pun_config['p_sig_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-								<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a>: <?php echo ($pun_config['o_smilies_sig'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+								<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_sig_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+								<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_sig_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+								<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies_sig'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
 							</ul>
 							<?php echo $signature_preview ?>
 						</div>
diff --git a/upload/register.php b/upload/register.php
index df26e27..4ec7fb5 100644
--- a/upload/register.php
+++ b/upload/register.php
@@ -374,7 +374,7 @@ if (!empty($errors))
 		{
 
 ?>
-							<label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?>
+							<label><?php echo $lang_prof_reg['Language'] ?>
 							<br /><select name="language">
 <?php
 
diff --git a/upload/search.php b/upload/search.php
index 464f48a..a477493 100644
--- a/upload/search.php
+++ b/upload/search.php
@@ -535,7 +535,7 @@ if (isset($_GET['action']) || isset($_GET['search_id']))
 				<div class="postleft">
 					<dl>
 						<dt><?php echo $pposter ?></dt>
-						<dd><?php echo $lang_common['Replies'] ?>: <?php echo forum_number_format($cur_search['num_replies']) ?></dd>
+						<dd><?php echo $lang_topic['Replies'].' '.forum_number_format($cur_search['num_replies']) ?></dd>
 						<dd><div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo $icon_text ?></div></div></dd>
 					</dl>
 				</div>
diff --git a/upload/style/Air.css b/upload/style/Air.css
index fdc2450..fa920d1 100644
--- a/upload/style/Air.css
+++ b/upload/style/Air.css
@@ -1465,12 +1465,12 @@ html, body, #punwrap {
 	border-color: #dfe6ee;
 }
 
-#puninstall form .forminfo {
+#puninstall form#install .forminfo {
 	background: #44699c;
 	color: #fff;
 }
 
-.pun #posterror .error-info {
+.pun #posterror .error-info, #puninstall .error-info {
 	background: #ffffe1;
 	border-color: #dfe6ee;
 }
@@ -1520,7 +1520,7 @@ html, body, #punwrap {
 }
 
 #adminconsole fieldset td.nodefault {
-    background: #d59b9b;
+	background: #d59b9b;
 }
 
 /* Status Indicators
diff --git a/upload/style/Air/img/index.html b/upload/style/Air/img/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Air/img/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/style/Air/index.html b/upload/style/Air/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Air/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/style/Earth.css b/upload/style/Earth.css
index 681b434..d9a13ed 100644
--- a/upload/style/Earth.css
+++ b/upload/style/Earth.css
@@ -1465,12 +1465,12 @@ html, body, #punwrap {
 	border-color: #dce6d8;
 }
 
-#puninstall form .forminfo {
-	background: #44699c;
+#puninstall form#install .forminfo {
+	background: #32671d;
 	color: #fff;
 }
 
-.pun #posterror .error-info {
+.pun #posterror .error-info, #puninstall .error-info {
 	background: #ffffe1;
 	border-color: #dce6d8;
 }
@@ -1520,7 +1520,7 @@ html, body, #punwrap {
 }
 
 #adminconsole fieldset td.nodefault {
-    background: #d59b9b;
+	background: #d59b9b;
 }
 
 /* Status Indicators
diff --git a/upload/style/Earth/index.html b/upload/style/Earth/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Earth/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/style/Fire.css b/upload/style/Fire.css
index a88db6d..40f3ccc 100644
--- a/upload/style/Fire.css
+++ b/upload/style/Fire.css
@@ -1465,12 +1465,12 @@ html, body, #punwrap {
 	border-color: #ebe0dc;
 }
 
-#puninstall form .forminfo {
+#puninstall form#install .forminfo {
 	background: #990000;
 	color: #fff;
 }
 
-.pun #posterror .error-info {
+.pun #posterror .error-info, #puninstall .error-info {
 	background: #ffffe1;
 	border-color: #ebe0dc;
 }
@@ -1520,7 +1520,7 @@ html, body, #punwrap {
 }
 
 #adminconsole fieldset td.nodefault {
-    background: #d59b9b;
+	background: #d59b9b;
 }
 
 /* Status Indicators
diff --git a/upload/style/Fire/img/index.html b/upload/style/Fire/img/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Fire/img/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/style/Fire/index.html b/upload/style/Fire/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Fire/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/style/Technetium/feed.png b/upload/style/Technetium/feed.png
new file mode 100644
index 0000000..d4cf8ce
Binary files /dev/null and b/upload/style/Technetium/feed.png differ
diff --git a/upload/style/Technetium/index.html b/upload/style/Technetium/index.html
new file mode 100644
index 0000000..89337b2
--- /dev/null
+++ b/upload/style/Technetium/index.html
@@ -0,0 +1 @@
+<html><head><title>.</title></head><body>.</body></html>
diff --git a/upload/viewtopic.php b/upload/viewtopic.php
index 726a7d5..47eb282 100644
--- a/upload/viewtopic.php
+++ b/upload/viewtopic.php
@@ -394,9 +394,9 @@ if ($quickpost)
 <?php if ($pun_config['o_subscriptions'] == '1' && ($pun_user['auto_notify'] == '1' || $cur_topic['is_subscribed'])): ?>						<input type="hidden" name="subscribe" value="1" />
 <?php endif; ?>						<label><textarea name="req_message" rows="7" cols="75" tabindex="1"></textarea></label>
 						<ul class="bblinks">
-							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a>: <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a>: <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
-							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a>: <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
+							<li><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></li>
 						</ul>
 					</div>
 				</fieldset>
