diff --git a/system/init.php b/system/init.php
index 5bebe93a..72419473 100644
--- a/system/init.php
+++ b/system/init.php
@@ -120,6 +120,7 @@ define('USE_ACCOUNT_NAME', fieldExist('name', 'accounts'));
 $tmp = '';
 if($cache->enabled() && $cache->fetch('vocations', $tmp)) {
 	$config['vocations'] = unserialize($tmp);
+	$config['vocation_last'] = $cache->get('vocation_last');
 }
 else {
 	$vocations = new DOMDocument();
@@ -135,14 +136,15 @@ else {
 	$config['vocations'] = array();
 	foreach($vocations->getElementsByTagName('vocation') as $vocation) {
 		$id = $vocation->getAttribute('id');
-		//if($id == $vocation->getAttribute('fromvoc'))
-			$config['vocations'][$id] = $vocation->getAttribute('name');
-		//else
-		//	$config['vocations'][$id] = $vocation->getAttribute('name');
+		if($id == $vocation->getAttribute('fromvoc'))
+			$config['vocation_last'] = $id;
+
+		$config['vocations'][$id] = $vocation->getAttribute('name');
 	}
 
 	if($cache->enabled()) {
 		$cache->set('vocations', serialize($config['vocations']), 120);
+		$cache->set('vocation_last', $config['vocation_last'], 120);
 	}
 }
 unset($tmp, $id, $vocation);
diff --git a/system/pages/guilds.php b/system/pages/guilds.php
index 03c96aa0..429d9c53 100644
--- a/system/pages/guilds.php
+++ b/system/pages/guilds.php
@@ -316,8 +316,8 @@ if($action == 'show')
 					if($level_in_guild > $rank->getLevel() || $guild_leader)
 						if($guild_leader_char->getName() != $player->getName())
 							echo '&nbsp;<font size=1>{<a href="?subtopic=guilds&action=kickplayer&guild='.urlencode($guild->getName()).'&name='.urlencode($player->getName()).'">KICK</a>}</font>';
-					if($player->isOnline())
-						$s_members_online++;
+					//if($player->isOnline())
+					//	$s_members_online++;
 					echo '</FORM></TD><TD align="right" width="10%">'.$player->getLevel().'</TD><TD align="right" width="20%"><font color="'.($player->isOnline() ? 'green"><b>Online' : 'red"><b>Offline').'</b></font></TD></TR>';
 				}
 				echo '</TABLE></TD></TR>';
diff --git a/system/pages/online.php b/system/pages/online.php
index 3bd19169..7880aa7e 100644
--- a/system/pages/online.php
+++ b/system/pages/online.php
@@ -52,7 +52,12 @@ if($config['online_outfit']) {
 	}
 }
 
-$vocs = array(0, 0, 0, 0, 0);
+if($config['online_vocations']) {
+	$vocs = array();
+	foreach($config['vocations'] as $id => $name)
+		$vocs[$id] = 0;
+}
+
 if(tableExist('players_online')) // tfs 1.0
 	$playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `level`, `vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players`, `players_online` WHERE `players`.`id` = `players_online`.`player_id` AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);
 else
@@ -90,7 +95,8 @@ foreach($playersOnline as $player)
 		<td>'.$config['vocations'][$player['vocation']].'</td>
 	</tr>';
 
-	$vocs[$player['vocation']]++;
+	if($config['online_vocations'])
+		$vocs[$player['vocation']]++;
 }
 
 if(!$players): ?>
@@ -180,7 +186,7 @@ if($config['online_vocations']): ?>
 			</tr>
 
 		<?php
-			for($i = 1; $i < 5; $i++)
+			for($i = 1; $i <= $config['vocation_last']; $i++)
 			echo '<tr bgcolor="' . getStyle($i) . '">
 				<td width="25%">' . $config['vocations'][$i] . '</td>
 				<td width="75%">' . $vocs[$i] . '</td>