diff --git a/install/sql/incremental/upd_0067.sql b/install/sql/incremental/upd_0067.sql
new file mode 100644
index 0000000000000000000000000000000000000000..10eb88fe2a3b4ac18cb81e014675b5de77e0d381
--- /dev/null
+++ b/install/sql/incremental/upd_0067.sql
@@ -0,0 +1,7 @@
+ALTER TABLE `client`
+	ADD `web_servers` blob NOT NULL DEFAULT '' AFTER `default_webserver`,
+	ADD `mail_servers` blob NOT NULL DEFAULT '' AFTER `default_mailserver`,
+	ADD `db_servers` blob NOT NULL DEFAULT '' AFTER `default_dbserver`,
+	ADD `dns_servers` blob NOT NULL DEFAULT '' AFTER `default_dnsserver`;
+
+UPDATE `client` SET `web_servers` = `default_webserver`, `mail_servers` = `default_mailserver`, `db_servers` = `default_dbserver`, `dns_servers` = `default_dnsserver` WHERE 1;
diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php
index 2e49c8de97104618050bcd8d55a4cb3a908ee0df..c0803f0bea1b0edc3621d7249983c4646f21670d 100644
--- a/interface/lib/classes/ispcmail.inc.php
+++ b/interface/lib/classes/ispcmail.inc.php
@@ -638,7 +638,72 @@ class ispcmail {
 		return true;
 	}
 
+	private function _extract_names($data) {
+		$senders = array();
+
+		$data = stripslashes(preg_replace("'(\t|\r|\n)'", '', $data));
+
+		if(trim($data) == '') return $senders;
+
+		$armail = array();
+		$counter = 0;  $inthechar = 0;
+		$chartosplit = ',;'; $protectchar = '"'; $temp = '';
+		$closed = 1;
+
+		for($i = 0; $i < strlen($data); $i++) {
+			$thischar = $data[$i];
+			if($thischar == '<' && $closed) $closed = 0;
+			if($thischar == '>' && !$closed) $closed = 1;
+			if($thischar == $protectchar) $inthechar = ($inthechar) ? 0 : 1;
+			if((strpos($chartosplit, $thischar) !== false) && !$inthechar && $closed) {
+				$armail[] = $temp;
+				$temp = '';
+			} else {
+				$temp .= $thischar;
+			}
+		}
+
+		if(trim($temp) != '') {
+			$armail[] = trim($temp);
+			unset($temp);
+		}
+
+		foreach($armail as $thisPart) {
+			$thisPart = trim(preg_replace('/^"(.*)"$/i', '$1', trim($thisPart)));
+			if($thisPart != '') {
+				$email = '';
+				$name = '';
+				if(preg_match('/(.*)<(.*)>/i', $thisPart, $matches)) {
+					$email = trim($matches[2]);
+					$name = trim($matches[1]);
+				} else {
+					if(preg_match('/([-a-z0-9_$+.]+@[-a-z0-9_.]+[-a-z0-9_]+)((.*))/i', $thisPart, $matches)) {
+						$email = $matches[1];
+						$name = $matches[2];
+					} else {
+						$email = $thisPart;
+					}
+				}
 
+				$email = preg_replace('/<(.*)\\>/', '$1', $email);
+				$name = preg_replace('/"(.*)"/', '$1', trim($name));
+				$name = preg_replace('/\((.*)\)/', '$1', $name);
+
+				if($name == '') $name = $email;
+				if($email == '') $email = $name;
+				$senders[] = array(
+					'name' => $name,
+					'mail' => $email
+				);
+				unset($name);
+				unset($email);
+			}
+		}
+		unset($armail);
+		unset($thisPart);
+
+		return $senders;
+	}
 
 	/**
 	 * Send the mail to one or more recipients
@@ -683,6 +748,7 @@ class ispcmail {
 				$result = $this->_smtp_login();
 				if(!$result) return false;
 			}
+			$bcc_cc_sent = false;
 			foreach($recipients as $recipname => $recip) {
 				if($this->_sent_mails >= $this->smtp_max_mails) {
 					// close connection to smtp and reconnect
@@ -705,6 +771,19 @@ class ispcmail {
 				fputs($this->_smtp_conn, 'RCPT TO: <' . $recip . '>' . $this->_crlf);
 				$response = fgets($this->_smtp_conn, 515);
 
+				if($bcc_cc_sent == false) {
+					$add_recips = array();
+					if($this->getHeader('Cc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Cc')));
+					if($this->getHeader('Bcc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Bcc')));
+					foreach($add_recips as $add_recip) {
+						if(!$add_recip['mail']) continue;
+						fputs($this->_smtp_conn, 'RCPT TO: <' . $this->_encodeHeader($add_recip['mail'], $this->mail_charset) . '>' . $this->_crlf);
+						$response = fgets($this->_smtp_conn, 515);
+					}
+					unset($add_recips);
+					$bcc_cc_sent = true;
+				}
+
 				//The Email
 				fputs($this->_smtp_conn, 'DATA' . $this->_crlf);
 				$response = fgets($this->_smtp_conn, 515);
@@ -715,7 +794,6 @@ class ispcmail {
 
 				$mail_content = 'Subject: ' . $enc_subject . $this->_crlf;
 				$mail_content .= 'To: ' . $this->getHeader('To') . $this->_crlf;
-				if($this->getHeader('Bcc') != '') $mail_content .= 'Bcc: ' . $this->_encodeHeader($this->getHeader('Bcc'), $this->mail_charset) . $this->_crlf;
 				if($this->getHeader('Cc') != '') $mail_content .= 'Cc: ' . $this->_encodeHeader($this->getHeader('Cc'), $this->mail_charset) . $this->_crlf;
 				$mail_content .= implode($this->_crlf, $headers) . $this->_crlf . ($this->_is_signed == false ? $this->_crlf : '') . $this->body;
 
diff --git a/interface/lib/classes/tpl.inc.php b/interface/lib/classes/tpl.inc.php
index a8533bb8ed45227829041c59266607682d8ce499..34df2a9343c467c2dfe39bb017fbcaee0a30c1cd 100644
--- a/interface/lib/classes/tpl.inc.php
+++ b/interface/lib/classes/tpl.inc.php
@@ -234,12 +234,12 @@ if (!defined('vlibTemplateClassLoaded')) {
 			if (is_array($k)) {
 				foreach($k as $key => $value){
 					$key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key);
-					if (preg_match('/^[A-Za-z]+[A-Za-z0-9_]*$/', $key) && $value !== null ) {
+					if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $key) && $value !== null ) {
 						$this->_vars[$key] = $value;
 					}
 				}
 			} else {
-				if (preg_match('/^[A-Za-z]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
+				if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
 					if ($this->OPTIONS['CASELESS']) $k = strtolower($k);
 					$this->_vars[trim($k)] = $v;
 				} else {
@@ -287,7 +287,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 			for ($i = 0; $i < $num_args; $i++) {
 				$var = func_get_arg($i);
 				if ($this->OPTIONS['CASELESS']) $var = strtolower($var);
-				if (!preg_match('/^[A-Za-z]+[A-Za-z0-9_]*$/', $var)) continue;
+				if (!preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $var)) continue;
 				unset($this->_vars[$var]);
 			}
 			return true;
@@ -344,7 +344,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 */
 		public function setLoop($k, $v)
 		{
-			if (is_array($v) && preg_match('/^[A-Za-z]+[A-Za-z0-9_]*$/', $k)) {
+			if (is_array($v) && preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k)) {
 				$k = ($this->OPTIONS['CASELESS']) ? strtolower(trim($k)) : trim($k);
 				$this->_arrvars[$k] = array();
 				if ($this->OPTIONS['SET_LOOP_VAR'] && !empty($v)) $this->setvar($k, 1);
@@ -1006,7 +1006,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return string used for eval'ing
 		 */
-		function _parseIf ($varname, $value=null, $op=null, $namespace=null, $format=null) {
+		private function _parseIf($varname, $value = null, $op = null, $namespace = null, $format = null)
+		{
 			if (isset($namespace)) $namespace = substr($namespace, 0, -1);
 			$comp_str = ''; // used for extended if statements
 
@@ -1046,14 +1047,14 @@ if (!defined('vlibTemplateClassLoaded')) {
 			if ($this->OPTIONS['GLOBAL_VARS'] && empty($namespace)) {
 				$retstr = '(('.$retstr.'[\''.$varname.'\'] !== null) ? '.$retstr.'[\''.$varname.'\'] : $this->_vars[\''.$varname.'\'])';
 				if(isset($format) && isset($value) && $format == 'version') {
-					return 'version_compare(' . $retstr . ', \'' . $value . '\', ' . (!empty($op) ? $op : '==') . ')';
+					return 'version_compare(' . $retstr . ', \'' . $value . '\', \'' . (!empty($op) ? $op : '==') . '\')';
 				} else {
 					return $retstr.$comp_str;
 				}
 			}
 			else {
 				if(isset($format) && isset($value) && $format == 'version') {
-					return 'version_compare(' . $retstr."['".$varname."']" . ', \'' . $value . '\', ' . (!empty($op) ? $op : '==') . ')';
+					return 'version_compare(' . $retstr."['".$varname."']" . ', \'' . $value . '\', \'' . (!empty($op) ? $op : '==') . '\')';
 				} else {
 					return $retstr."['".$varname."']".$comp_str;
 				}
@@ -1183,8 +1184,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 				if ($tag == 'loop' || $tag == 'endloop') array_pop($this->_namespace);
 				if ($tag == 'comment' || $tag == 'endcomment') {
 					return '<?php */ ?>';
-				}
-				else {
+				} else {
 					return '<?php } ?>';
 				}
 			}
@@ -1207,6 +1207,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 					$$key = $match[2];
 				}
 			}
+
 			$var = ($this->OPTIONS['CASELESS']) ? strtolower($name) : $name;
 
 			if ($this->_debug && !empty($var)) {
@@ -1228,47 +1229,37 @@ if (!defined('vlibTemplateClassLoaded')) {
 				if (empty($escape) && (!empty($this->OPTIONS['DEFAULT_ESCAPE']) && strtolower($this->OPTIONS['DEFAULT_ESCAPE']) != 'none')) {
 					$escape = strtolower($this->OPTIONS['DEFAULT_ESCAPE']);
 				}
-				return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'."\n";
-				break;
+				return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace)." ?>\n";
 
 			case 'if':
 				return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'unless':
 				return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'elseif':
 				return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'loop':
 				return '<?php '. $this->_parseLoop($var) .'?>';
-				break;
 
 			case 'comment':
 				if (empty($var)) { // full open/close style comment
 					return '<?php /* ?>';
-				}
-				else { // just ignore tag if it was a one line comment
+				} else { // just ignore tag if it was a one line comment
 					return;
 				}
-				break;
 
 			case 'phpinclude':
 				if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
 					return '<?php include(\''.$file.'\'); ?>';
 				}
-				break;
 
 			case 'include':
 				return '<?php $this->_getData($this->_fileSearch(\''.$file.'\'), 1); ?>';
-				break;
 
 			case 'dyninclude':
 				return '<?php $this->_getData($this->_fileSearch($this->_dyninclude[\''.$name.'\']), 1); ?>';
-				break;
 
 			default:
 				if ($this->OPTIONS['STRICT']) vlibTemplateError::raiseError('VT_ERROR_INVALID_TAG', KILL, htmlspecialchars($wholetag, ENT_QUOTES));
diff --git a/interface/web/mail/form/spamfilter_blacklist.tform.php b/interface/web/mail/form/spamfilter_blacklist.tform.php
index 091fb450633cb13d1bee1e48e3563dbdad70f6e9..495ce5f5fa398192a4c72e154cbabe8c1a557c68 100644
--- a/interface/web/mail/form/spamfilter_blacklist.tform.php
+++ b/interface/web/mail/form/spamfilter_blacklist.tform.php
@@ -101,7 +101,7 @@ $form["tabs"]['blacklist'] = array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
 			'default' => 5,
-			'value'  => array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10)
+			'value'  => array(1 => '1 - lowest', 2 => 2, 3 => 3, 4 => 4, 5 => '5 - medium', 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => '10 - highest')
 		),
 		'active' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/form/spamfilter_users.tform.php b/interface/web/mail/form/spamfilter_users.tform.php
index 7bd6c460f726a5c02f8cbe9606f2f3d14747ee84..2bbb12c0cf07c0c5ff3efd267eb229cfb05880fd 100644
--- a/interface/web/mail/form/spamfilter_users.tform.php
+++ b/interface/web/mail/form/spamfilter_users.tform.php
@@ -73,7 +73,7 @@ $form["tabs"]['users'] = array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
 			'default' => 5,
-			'value'  => array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10)
+			'value'  => array(1 => '1 - lowest', 2 => 2, 3 => 3, 4 => 4, 5 => '5 - medium', 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => '10 - highest')
 		),
 		'policy_id' => array (
 			'datatype' => 'INTEGER',
diff --git a/interface/web/mail/form/spamfilter_whitelist.tform.php b/interface/web/mail/form/spamfilter_whitelist.tform.php
index bf2ae439c45dacdb4c09d4ef3bb286fc149dd7f3..ddd54d1635ddbb968e3ea5510ba7f622f5c2ecd4 100644
--- a/interface/web/mail/form/spamfilter_whitelist.tform.php
+++ b/interface/web/mail/form/spamfilter_whitelist.tform.php
@@ -108,7 +108,7 @@ $form["tabs"]['whitelist'] = array (
 			'datatype' => 'INTEGER',
 			'formtype' => 'SELECT',
 			'default' => 5,
-			'value'  => array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10)
+			'value'  => array(1 => '1 - lowest', 2 => 2, 3 => 3, 4 => 4, 5 => '5 - medium', 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => '10 - highest')
 		),
 		'active' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
index 1dd4c6e3fa7b524d5d7cdb919000b0ee1099d5b0..6c08e33c79ce0e12a20d693d7f7c7efa46010950 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
@@ -6,4 +6,7 @@ $wb['email_txt'] = 'E-Mail Adresse';
 $wb['priority_txt'] = 'Priorität';
 $wb['active_txt'] = 'Aktiv';
 $wb['limit_spamfilter_wblist_txt'] = 'Die maximale Anzahl an White- oder Blacklist Einträgen für ihr Konto wurde erreicht.';
+$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['5 - medium'] = '5 - normal';
+$wb['1 - lowest'] = '1 - niedrigste';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_users.lng b/interface/web/mail/lib/lang/de_spamfilter_users.lng
index b7f6cd496bfbd53a234f84b5db73db3a2eb90ae8..8528677c29f1892316bb645df27200ec03a162bc 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_users.lng
@@ -7,4 +7,7 @@ $wb['fullname_txt'] = 'Name';
 $wb['local_txt'] = 'Lokal';
 $wb['email_error_notempty'] = 'Die E-Mail-Adresse darf nicht leer sein.';
 $wb['fullname_error_notempty'] = 'Der Name darf nicht leer sein.';
+$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['5 - medium'] = '5 - normal';
+$wb['1 - lowest'] = '1 - niedrigste';
 ?>
diff --git a/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
index d388432c66dbe039820fcbddba5dd0f1a54fe8fb..7a953fa6cb172f76693b02f8441c1391b11e096a 100644
--- a/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
@@ -6,4 +6,7 @@ $wb['email_txt'] = 'E-Mail';
 $wb['priority_txt'] = 'Priorität';
 $wb['active_txt'] = 'Aktiv';
 $wb['limit_spamfilter_wblist_txt'] = 'Die maximale Anzahl an White- oder Blacklist Einträgen für Ihr Konto wurde erreicht.';
+$wb['10 - highest'] = '10 - h&ouml;chste';
+$wb['5 - medium'] = '5 - normal';
+$wb['1 - lowest'] = '1 - niedrigste';
 ?>
diff --git a/interface/web/mail/lib/lang/en_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/en_spamfilter_blacklist.lng
index 6478b1f2fce33f0b06ed467983d5eae977913b1a..b71e5966fda7aa90f4ff6bcf0c9db9262d3920f2 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_blacklist.lng
@@ -6,4 +6,7 @@ $wb["email_txt"] = 'Email';
 $wb["priority_txt"] = 'Priority';
 $wb["active_txt"] = 'Active';
 $wb["limit_spamfilter_wblist_txt"] = 'The max. number of White- or Blacklist records for your account is reached.';
+$wb['10 - highest'] = '10 - highest';
+$wb['5 - medium'] = '5 - medium';
+$wb['1 - lowest'] = '1 - lowest';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_spamfilter_users.lng b/interface/web/mail/lib/lang/en_spamfilter_users.lng
index 38d51aee4344597ba78c019f382d017fbed3fab5..280ae9a1c89e97a381d6dc142f0a4f02acf94712 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_users.lng
@@ -7,4 +7,7 @@ $wb["fullname_txt"] = 'Name';
 $wb["local_txt"] = 'Local';
 $wb['email_error_notempty'] = 'The email address must not be empty.';
 $wb['fullname_error_notempty'] = 'The name must not be empty.';
+$wb['10 - highest'] = '10 - highest';
+$wb['5 - medium'] = '5 - medium';
+$wb['1 - lowest'] = '1 - lowest';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/en_spamfilter_whitelist.lng
index 6478b1f2fce33f0b06ed467983d5eae977913b1a..b71e5966fda7aa90f4ff6bcf0c9db9262d3920f2 100644
--- a/interface/web/mail/lib/lang/en_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/en_spamfilter_whitelist.lng
@@ -6,4 +6,7 @@ $wb["email_txt"] = 'Email';
 $wb["priority_txt"] = 'Priority';
 $wb["active_txt"] = 'Active';
 $wb["limit_spamfilter_wblist_txt"] = 'The max. number of White- or Blacklist records for your account is reached.';
+$wb['10 - highest'] = '10 - highest';
+$wb['5 - medium'] = '5 - medium';
+$wb['1 - lowest'] = '1 - lowest';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/mail_user_stats.php b/interface/web/mail/mail_user_stats.php
index 6fd72e23bd9e1142314a2cc16906f4056e78b0bc..356d28cf3bc9c104ad8791badd4e13ae728a85bd 100644
--- a/interface/web/mail/mail_user_stats.php
+++ b/interface/web/mail/mail_user_stats.php
@@ -65,7 +65,7 @@ class list_action extends listform_actions {
 		return $rec;
 	}
 
-	function getQueryString() {
+	function getQueryString($no_limit = false) {
 		global $app;
 		$sql_where = '';
 
diff --git a/interface/web/sites/web_sites_stats.php b/interface/web/sites/web_sites_stats.php
index b6e3a3da4d81533dc551d6951388c572b07e2a6e..4e5535e0df49a5e0d4a819218a110a951b12dd52 100644
--- a/interface/web/sites/web_sites_stats.php
+++ b/interface/web/sites/web_sites_stats.php
@@ -91,7 +91,7 @@ class list_action extends listform_actions {
 		$app->tpl->pparse();
 	}
 
-	function getQueryString() {
+	function getQueryString($no_limit = false) {
 		global $app;
 		$sql_where = '';
 
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index 49f829a6d4465c2fe4a56d8b3f8317925a014ed1..99665df0d64ef43309f7d4ac6ce99b22f57a8ab4 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -21,12 +21,12 @@
     <Directory {tmpl_var name='apps_vhost_dir'}>
 		Options FollowSymLinks
 		AllowOverride None
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
 		Order allow,deny
 		Allow from all
-		{/tmpl_if}
+		</tmpl_if>
     </Directory>
   </IfModule>
   
@@ -38,12 +38,12 @@
 		AllowOverride AuthConfig Indexes Limit Options FileInfo
 		AddHandler fcgid-script .php
 		FCGIWrapper {tmpl_var name='apps_vhost_basedir'}/php-fcgi-scripts/apps/.php-fcgi-starter .php
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
 		Order allow,deny
 		Allow from all
-		{/tmpl_if}
+		</tmpl_if>
     </Directory>
   </IfModule>
 
diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index a6151988071b2ab5f52ef9d435d89391cd7ed1ce..f9062f549da65c17c5447b36986dd9f6af26913e 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -8,100 +8,100 @@ CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m
 
 <Directory /var/www/clients>
     AllowOverride None
-	{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 	Require all deny
-	{tmpl_else}
+	<tmpl_else>
 	Order Deny,Allow
 	Deny from all
-	{/tmpl_if}
+	</tmpl_if>
 </Directory>
 
 # Do not allow access to the root file system of the server for security reasons
 <Directory />
     AllowOverride None
-	{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 	Require all deny
-	{tmpl_else}
+	<tmpl_else>
 	Order Deny,Allow
 	Deny from all
-	{/tmpl_if}
+	</tmpl_if>
 </Directory>
 
 <Directory /var/www/conf>
     AllowOverride None
-	{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 	Require all deny
-	{tmpl_else}
+	<tmpl_else>
 	Order Deny,Allow
 	Deny from all
-	{/tmpl_if}
+	</tmpl_if>
 </Directory>
 
 # Except of the following directories that contain website scripts
 <Directory /usr/share/phpmyadmin>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 <Directory /usr/share/phpMyAdmin>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 <Directory /usr/share/squirrelmail>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 # Allow access to mailman on OpenSuSE
 <Directory /usr/lib/mailman/cgi-bin>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 <Directory /usr/lib/mailman/icons>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 <Directory /var/lib/mailman/archives/>
         Options +FollowSymLinks
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 # allow path to awstats and alias for awstats icons
 <Directory /usr/share/awstats>
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all granted
-		{tmpl_else}
+		<tmpl_else>
         Order allow,deny
         Allow from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 Alias /awstats-icon "/usr/share/awstats/icon"
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 0f8a79ad6104ef3126d329f738225004cfd21266..035f3a52a6fbd3bb44f91d76f0e11c80b6c34d58 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -1,12 +1,12 @@
 
 <Directory {tmpl_var name='web_basedir'}/{tmpl_var name='domain'}>
 		AllowOverride None
-		{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+		<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 		Require all deny
-		{tmpl_else}
+		<tmpl_else>
 		Order Deny,Allow
 		Deny from all
-		{/tmpl_if}
+		</tmpl_if>
 </Directory>
 
 <tmpl_loop name="vhosts">
@@ -59,12 +59,12 @@
 		<Directory {tmpl_var name='web_document_root_www'}>
 				Options FollowSymLinks
 				AllowOverride <tmpl_var name='allow_override'>
-				{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
-				{tmpl_else}
+				<tmpl_else>
 				Order allow,deny
 				Allow from all
-				{/tmpl_if}
+				</tmpl_if>
 <tmpl_if name='ssi' op='==' value='y'>
 
 				# ssi enabled
@@ -74,25 +74,25 @@
 </tmpl_if>
 <tmpl_if name='php' op='==' value='no'>
 				<Files ~ '.php[s3-6]{0,1}$'>
-						{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+						<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 						Require all denied
-						{tmpl_else}
+						<tmpl_else>
 						Order allow,deny
 						Deny from all
 						Allow from none
-						{/tmpl_if}
+						</tmpl_if>
 				</Files>
 </tmpl_if>
 		</Directory>
 		<Directory {tmpl_var name='web_document_root'}>
 				Options FollowSymLinks
 				AllowOverride <tmpl_var name='allow_override'>
-				{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
-				{tmpl_else}
+				<tmpl_else>
 				Order allow,deny
 				Allow from all
-				{/tmpl_if}
+				</tmpl_if>
 <tmpl_if name='ssi' op='==' value='y'>
 
 				# ssi enabled
@@ -102,13 +102,13 @@
 </tmpl_if>
 <tmpl_if name='php' op='==' value='no'>
 				<Files ~ '.php[s3-6]{0,1}$'>
-					{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+					<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 					Require all denied
-					{tmpl_else}
+					<tmpl_else>
 					Order allow,deny
 					Deny from all
 					Allow from none
-					{/tmpl_if}
+					</tmpl_if>
 				</Files>
 </tmpl_if>
 		</Directory>
@@ -161,12 +161,12 @@
 <tmpl_if name='cgi' op='==' value='y'>
 		# cgi enabled
 	<Directory {tmpl_var name='document_root'}/cgi-bin>
-			{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+			<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 			Require all granted
-			{tmpl_else}
+			<tmpl_else>
 			Order allow,deny
 			Allow from all
-			{/tmpl_if}
+			</tmpl_if>
 		</Directory>
 		ScriptAlias  /cgi-bin/ <tmpl_var name='document_root'>/cgi-bin/
 		AddHandler cgi-script .cgi
@@ -213,12 +213,12 @@
 		Action php5-cgi /php5-cgi
 		AddHandler php5-cgi .php .php3 .php4 .php5
 		<Directory {tmpl_var name='cgi_starter_path'}>
-			{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+			<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 			Require all granted
-			{tmpl_else}
+			<tmpl_else>
 			Order allow,deny
 			Allow from all
-			{/tmpl_if}
+			</tmpl_if>
 		</Directory>
 </tmpl_if>
 <tmpl_if name='php' op='==' value='fast-cgi'>
@@ -252,35 +252,35 @@
 				FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
 				Options +ExecCGI
 				AllowOverride <tmpl_var name='allow_override'>
-				{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
-				{tmpl_else}
+				<tmpl_else>
 				Order allow,deny
 				Allow from all
-				{/tmpl_if}
+				</tmpl_if>
 		</Directory>
 		<Directory {tmpl_var name='web_document_root'}>
 				AddHandler fcgid-script .php .php3 .php4 .php5
 				FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
 				Options +ExecCGI
 				AllowOverride <tmpl_var name='allow_override'>
-				{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 				Require all granted
-				{tmpl_else}
+				<tmpl_else>
 				Order allow,deny
 				Allow from all
-				{/tmpl_if}
+				</tmpl_if>
 		</Directory>
 </tmpl_if>
 <tmpl_if name='php' op='==' value='php-fpm'>
 		<IfModule mod_fastcgi.c>
 				<Directory {tmpl_var name='document_root'}/cgi-bin>
-					{tmpl_if name='apache_version' op='>' value='2.2' format='version'}
+					<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 					Require all granted
-					{tmpl_else}
+					<tmpl_else>
 					Order allow,deny
 					Allow from all
-					{/tmpl_if}
+					</tmpl_if>
 			    </Directory>
                 AddHandler php5-fcgi .php
                 Action php5-fcgi /php5-fcgi
diff --git a/server/lib/classes/tpl.inc.php b/server/lib/classes/tpl.inc.php
index 2a91b0654b957e2765e818615a24f7dcc1c16117..34df2a9343c467c2dfe39bb017fbcaee0a30c1cd 100644
--- a/server/lib/classes/tpl.inc.php
+++ b/server/lib/classes/tpl.inc.php
@@ -1,4 +1,17 @@
 <?php
+/**
+ * vlibTemplate is a class used to seperate PHP and HTML.
+ * For instructions on how to use vlibTemplate, see the
+ * vlibTemplate.html file, located in the 'docs' directory.
+ *
+ * @since 07/03/2002
+ * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
+ * @package vLIB
+ * @access public
+ * @see vlibTemplate.html
+ */
+
+
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
 // +----------------------------------------------------------------------+
 // | PHP version 4.0                                                      |
@@ -10,34 +23,20 @@
 //
 // $Id: class.tpl.inc.php,v 1.1 2003/07/08 12:31:10 platinum Exp $
 
-// check to avoid multiple including of class
+//** check and avoid multiple loading of class
 if (!defined('vlibTemplateClassLoaded')) {
-	define('vlibTemplateClassLoaded', 1);
-
-	include_once $conf['classpath'].'/tpl_error.inc.php';
-	include_once $conf['classpath'].'/tpl_ini.inc.php';
-
-	/**
-	 * vlibTemplate is a class used to seperate PHP and HTML.
-	 * For instructions on how to use vlibTemplate, see the
-	 * vlibTemplate.html file, located in the 'docs' directory.
-	 *
-	 * @since 07/03/2002
-	 * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
-	 * @package vLIB
-	 * @access public
-	 * @see vlibTemplate.html
-	 */
 
+	define('vlibTemplateClassLoaded', 1);
+	include_once ISPC_CLASS_PATH.'/tpl_error.inc.php';
+	include_once ISPC_CLASS_PATH.'/tpl_ini.inc.php';
 
-	class tpl {
+	class tpl{
 
 		/*-----------------------------------------------------------------------------\
-    |                                 ATTENTION                                    |
-    |  Do not touch the following variables. vlibTemplate will not work otherwise. |
-    \-----------------------------------------------------------------------------*/
-
-		var $OPTIONS = array(
+        |                                 ATTENTION                                    |
+        |  Do not touch the following variables. vlibTemplate will not work otherwise. |
+        \-----------------------------------------------------------------------------*/
+		private $OPTIONS = array(
 			'MAX_INCLUDES'          =>   10,
 			'TEMPLATE_DIR'          => null,
 			'GLOBAL_VARS'           => null,
@@ -57,138 +56,154 @@ if (!defined('vlibTemplateClassLoaded')) {
 		);
 
 		/** open and close tags used for escaping */
-		var $ESCAPE_TAGS = array(
-			'html' => array('open' => 'htmlspecialchars('
-				, 'close'=> ', ENT_QUOTES)'),
-			'url' => array('open' => 'urlencode('
-				, 'close'=> ')'),
-			'rawurl'=>array('open' => 'rawurlencode('
-				, 'close'=> ')'),
-			'sq' => array('open' => 'addcslashes('
-				, 'close'=> ", \"'\")"),
-			'dq' => array('open' => 'addcslashes('
-				, 'close'=> ", '\"')"),
-			'1' => array('open' => 'htmlspecialchars('
-				, 'close'=> ', ENT_QUOTES)'),
-			'0' => array('open' => ''
-				, 'close'=> ''),
-			'none' => array('open' => ''
-				, 'close'=> ''),
-			'hex'        => array('open' => '$this->_escape_hex(',
-				'close'=> ', false)'),
-			'hexentity'  => array('open' => '$this->_escape_hex(',
-				'close'=> ', true)')
+		private $ESCAPE_TAGS = array(
+			'html'      => array('open' => 'htmlspecialchars('    , 'close'=> ', ENT_QUOTES)'),
+			'url'       => array('open' => 'urlencode('           , 'close'=> ')'),
+			'rawurl'    => array('open' => 'rawurlencode('        , 'close'=> ')'),
+			'sq'        => array('open' => 'addcslashes('         , 'close'=> ", \"'\")"),
+			'dq'        => array('open' => 'addcslashes('         , 'close'=> ", '\"')"),
+			'1'         => array('open' => 'htmlspecialchars('    , 'close'=> ', ENT_QUOTES)'),
+			'0'         => array('open' => ''                     , 'close'=> ''),
+			'none'      => array('open' => ''                     , 'close'=> ''),
+			'hex'       => array('open' => '$this->_escape_hex('  , 'close'=> ', false)'),
+			'hexentity' => array('open' => '$this->_escape_hex('  , 'close'=> ', true)')
 		);
 
+
+
 		/** open and close tags used for formatting */
-		var $FORMAT_TAGS = array(
-			'strtoupper' => array('open' => 'strtoupper(',
-				'close'=> ')'),
-			'uc'         => array('open' => 'strtoupper(',
-				'close'=> ')'),
-			'strtolower' => array('open' => 'strtolower(',
-				'close'=> ')'),
-			'lc'         => array('open' => 'strtolower(',
-				'close'=> ')'),
-			'ucfirst'    => array('open' => 'ucfirst(',
-				'close'=> ')'),
-			'lcucfirst'  => array('open' => 'ucfirst(strtolower(',
-				'close'=> '))'),
-			'ucwords'    => array('open' => 'ucwords(',
-				'close'=> ')'),
-			'lcucwords'  => array('open' => 'ucwords(strtolower(',
-				'close'=> '))')
+		private $FORMAT_TAGS = array(
+			'strtoupper' => array('open' => 'strtoupper(',          'close'=> ')'),
+			'uc'         => array('open' => 'strtoupper(',          'close'=> ')'),
+			'strtolower' => array('open' => 'strtolower(',          'close'=> ')'),
+			'lc'         => array('open' => 'strtolower(',          'close'=> ')'),
+			'ucfirst'    => array('open' => 'ucfirst(',             'close'=> ')'),
+			'lcucfirst'  => array('open' => 'ucfirst(strtolower(',  'close'=> '))'),
+			'ucwords'    => array('open' => 'ucwords(',             'close'=> ')'),
+			'lcucwords'  => array('open' => 'ucwords(strtolower(',  'close'=> '))')
 		);
 
 		/** operators allowed when using extended TMPL_IF syntax */
-		var $allowed_if_ops = array('==', '!=', '<>', '<', '>', '<=', '>=');
+		private $allowed_if_ops = array('==', '!=', '<>', '<', '>', '<=', '>=');
+
+
 
 		/** dbs allowed by vlibTemplate::setDbLoop(). */
-		var $allowed_loop_dbs = array('MYSQL', 'POSTGRESQL', 'INFORMIX', 'INTERBASE', 'INGRES',
+		private $allowed_loop_dbs = array('MYSQL', 'POSTGRESQL', 'INFORMIX', 'INTERBASE', 'INGRES',
 			'MSSQL', 'MSQL', 'OCI8', 'ORACLE', 'OVRIMOS', 'SYBASE');
 
+
+
 		/** root directory of vlibTemplate automagically filled in */
-		var $VLIBTEMPLATE_ROOT = null;
+		private $VLIBTEMPLATE_ROOT = null;
+
+
 
 		/** contains current directory used when doing recursive include */
-		var $_currentincludedir = array();
+		private $_currentincludedir = array();
+
+
 
 		/** current depth of includes */
-		var $_includedepth = 0;
+		private $_includedepth = 0;
+
+
 
 		/** full path to tmpl file */
-		var $_tmplfilename = null;
+		private $_tmplfilename = null;
+
+
 
 		/** file data before it's parsed */
-		var $_tmplfile = null;
+		private $_tmplfile = null;
+
+
 
 		/** parsed version of file, ready for eval()ing */
-		var $_tmplfilep = null;
+		private $_tmplfilep = null;
+
+
 
 		/** eval()ed version ready for printing or whatever */
-		var $_tmploutput = null;
+		private $_tmploutput = null;
+
+
 
 		/** array for variables to be kept */
-		var $_vars = array();
+		private $_vars = array();
+
+
 
 		/** array where loop variables are kept */
-		var $_arrvars = array();
+		private $_arrvars = array();
 
 		/** array which holds the current namespace during parse */
-		var $_namespace = array();
+		private $_namespace = array();
+
+
 
 		/** variable is set to true once the template is parsed, to save re-parsing everything */
-		var $_parsed = false;
+		private $_parsed = false;
+
+
 
 		/** array holds all unknowns vars */
-		var $_unknowns = array();
+		private $_unknowns = array();
+
+
 
 		/** microtime when template parsing began */
-		var $_firstparsetime = null;
+		private $_firstparsetime = null;
+
+
 
 		/** total time taken to parse template */
-		var $_totalparsetime = null;
+		private $_totalparsetime = null;
+
+
 
 		/** name of current loop being passed in */
-		var $_currloopname = null;
+		private $_currloopname = null;
+
+
 
 		/** rows with the above loop */
-		var $_currloop = array();
+		private $_currloop = array();
 
-		/** define vars to avoid warnings */
-		var $_debug = null;
-		var $_cache = null;
 
 
+		/** define vars to avoid warnings */
+		private $_debug = null;
+		private $_cache = null;
 
-		/** array which holds the dynamic Includes */
-		var $_dyninclude = array();
-		/*-----------------------------------------------------------------------------\
-    |                           public functions                                   |
-    \-----------------------------------------------------------------------------*/
 
 
+		/** array which holds the dynamic Includes */
+		private $_dyninclude = array();
 
+		/*-----------------------------------------------------------------------------\
+        |                           public functions                                   |
+        \-----------------------------------------------------------------------------*/
 
 
 
 
 
 		/**
-		 * FUNCTION: newTemplate
-		 *
 		 * Usually called by the class constructor.
 		 * Stores the filename in $this->_tmplfilename.
 		 * Raises an error if the template file is not found.
-		 *
 		 * @param string $tmplfile full path to template file
 		 * @return boolean true
 		 * @access public
 		 */
-		function newTemplate ($tmplfile) {
-			if (!$tfile = $this->_fileSearch($tmplfile)) vlibTemplateError::raiseError('VT_ERROR_NOFILE', KILL, $tmplfile);
+		public function newTemplate($tmplfile)
+		{
+			if (!$tfile = $this->_fileSearch($tmplfile)){
+				vlibTemplateError::raiseError('VT_ERROR_NOFILE', KILL, $tmplfile);
+			}
 
-			// make sure that any parsing vars are cleared for the new template
+			//* make sure that any parsing vars are cleared for the new template
 			$this->_tmplfile = null;
 			$this->_tmplfilep = null;
 			$this->_tmploutput = null;
@@ -197,27 +212,25 @@ if (!defined('vlibTemplateClassLoaded')) {
 			$this->_firstparsetime = null;
 			$this->_totalparsetime = null;
 
-			// reset debug module
-			if ($this->_debug) $this->_debugReset();
-
+			//* reset debug module
+			if ($this->_debug){
+				$this->_debugReset();
+			}
 			$this->_tmplfilename = $tfile;
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: setVar
-		 *
 		 * Sets variables to be used by the template
 		 * If $k is an array, then it will treat it as an associative array
 		 * using the keys as variable names and the values as variable values.
-		 *
 		 * @param mixed $k key to define variable name
 		 * @param mixed $v variable to assign to $k
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function setVar ($k, $v=null) {
+		public function setVar($k, $v = null)
+		{
 			if (is_array($k)) {
 				foreach($k as $key => $value){
 					$key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key);
@@ -225,13 +238,11 @@ if (!defined('vlibTemplateClassLoaded')) {
 						$this->_vars[$key] = $value;
 					}
 				}
-			}
-			else {
+			} else {
 				if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
 					if ($this->OPTIONS['CASELESS']) $k = strtolower($k);
 					$this->_vars[trim($k)] = $v;
-				}
-				else {
+				} else {
 					return false;
 				}
 			}
@@ -240,21 +251,17 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 
 
-
-
 		/**
-		 * FUNCTION: setInclude
-		 *
 		 * Sets dynamic includes to be used by the template
 		 * If $k is an array, then it will treat it as an associative array
 		 * using the keys as variable names and the values as variable values.
-		 *
 		 * @param mixed $k key to define variable name
 		 * @param mixed $v variable to assign to $k
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function setInclude($k, $v = null) {
+		public function setInclude($k, $v = null)
+		{
 			if(is_array($k)) {
 				foreach($k as $key => $val) {
 					$this->_dyninclude[$key] = $val;
@@ -262,22 +269,18 @@ if (!defined('vlibTemplateClassLoaded')) {
 			} else {
 				$this->_dyninclude[$k] = $v;
 			}
-
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: unsetVar
-		 *
 		 * Unsets a variable which has already been set
 		 * Parse in all vars wanted for deletion in seperate parametres
-		 *
 		 * @param string var name to remove use: vlibTemplate::unsetVar(var[, var..])
 		 * @return boolean true/false returns true unless called with 0 params
 		 * @access public
 		 */
-		function unsetVar () {
+		public function unsetVar()
+		{
 			$num_args = func_num_args();
 			if ($num_args < 1)  return false;
 
@@ -290,51 +293,40 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: getVars
-		 *
 		 * Gets all vars currently set in global namespace.
-		 *
 		 * @return array
 		 * @access public
 		 */
-		function getVars () {
-			if (empty($this->_vars)) return false;
-			return $this->_vars;
+		public function getVars()
+		{
+			return empty($this->_vars) ? false : $this->_vars;
 		}
 
-
 		/**
-		 * FUNCTION: getVar
-		 *
 		 * Gets a single var from the global namespace
-		 *
 		 * @return var
 		 * @access public
 		 */
-		function getVar ($var) {
+		public function getVar($var)
+		{
 			if ($this->OPTIONS['CASELESS']) $var = strtolower($var);
-			if (empty($var) || !isset($this->_vars[$var])) return false;
-			return $this->_vars[$var];
+			return (empty($var) || !isset($this->_vars[$var])) ? false : $this->_vars[$var];
 		}
 
-
 		/**
-		 * FUNCTION: setContextVars
-		 *
 		 * sets the GLOBAL_CONTEXT_VARS
-		 *
 		 * @return true
 		 * @access public
 		 */
-		function setContextVars () {
+		public function setContextVars()
+		{
 			$_phpself = @$GLOBALS['HTTP_SERVER_VARS']['PHP_SELF'];
 			$_pathinfo = @$GLOBALS['HTTP_SERVER_VARS']['PATH_INFO'];
 			$_request_uri = @$GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'];
 			$_qs   = @$GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING'];
 
-			// the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
+			//* the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
 			$_self = (!empty($_pathinfo)) ? $_pathinfo : $_phpself;
 			$_uri  = (!empty($_request_uri)) ? $_request_uri : $_self.'?'.$_qs;
 
@@ -343,66 +335,63 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: setLoop
-		 *
 		 * Builds the loop construct for use with <TMPL_LOOP>.
-		 *
 		 * @param string $k string to define loop name
 		 * @param array $v array to assign to $k
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function setLoop ($k, $v) {
+		public function setLoop($k, $v)
+		{
 			if (is_array($v) && preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k)) {
 				$k = ($this->OPTIONS['CASELESS']) ? strtolower(trim($k)) : trim($k);
 				$this->_arrvars[$k] = array();
 				if ($this->OPTIONS['SET_LOOP_VAR'] && !empty($v)) $this->setvar($k, 1);
 				if (($this->_arrvars[$k] = $this->_arrayBuild($v)) == false) {
 					vlibTemplateError::raiseError('VT_WARNING_INVALID_ARR', WARNING, $k);
+				} else {
+					$this->vars['_'.$k.'_num'] = count($v);
 				}
 			}
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: setDbLoop [** EXPERIMENTAL **]
-		 *
+		 * [** EXPERIMENTAL **]
 		 * Function to create a loop from a Db result resource link.
-		 *
 		 * @param string $loopname to commit loop. If not set, will use last loopname set using newLoop()
 		 * @param string $result link to a Db result resource
 		 * @param string $db_type, type of db that the result resource belongs to.
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function setDbLoop ($loopname, $result, $db_type='MYSQL') {
-
+		public function setDbLoop($loopname, $result, $db_type = 'MYSQL')
+		{
 			/*
-            $db_type = strtoupper($db_type);
+			$db_type = strtoupper($db_type);
             if (!in_array($db_type, $this->allowed_loop_dbs)) {
-                vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB',WARNING, $db_type);
+                vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB', WARNING, $db_type);
                 return false;
             }
 
             $loop_arr = array();
+            // TODO: Are all these necessary as were onyl using mysql and possible postgres ? - pedro
             switch ($db_type) {
 
                 case 'MYSQL':
                     if (get_resource_type($result) != 'mysql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = mysql_fetch_assoc($result)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'POSTGRESQL':
                     if (get_resource_type($result) != 'pgsql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
 
@@ -411,137 +400,130 @@ if (!defined('vlibTemplateClassLoaded')) {
                     for ($i=0; $i < $nr; $i++) {
                         $loop_arr[] = pg_fetch_array($result, $i, PGSQL_ASSOC);
                     }
-                break;
+                    break;
 
                 case 'INFORMIX':
                     if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = ifx_fetch_row($result, 'NEXT')) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'INTERBASE':
                     if (get_resource_type($result) != 'interbase result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = ibase_fetch_row($result)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'INGRES':
                     if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = ingres_fetch_array(INGRES_ASSOC, $result)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'MSSQL':
                     if (get_resource_type($result) != 'mssql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = mssql_fetch_array($result)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'MSQL':
                     if (get_resource_type($result) != 'msql result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while($r = msql_fetch_array($result, MSQL_ASSOC)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'OCI8':
                     if (get_resource_type($result) != 'oci8 statement') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while(OCIFetchInto($result, &$r, OCI_ASSOC+OCI_RETURN_LOBS)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'ORACLE':
                     if (get_resource_type($result) != 'oracle Cursor') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while(ora_fetch_into($result, &$r, ORA_FETCHINTO_ASSOC)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'OVRIMOS':
                     if (!$result) {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
                     while(ovrimos_fetch_into($result, &$r, 'NEXT')) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
 
                 case 'SYBASE':
                     if (get_resource_type($result) != 'sybase-db result') {
-                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
+                        vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE', WARNING, $db_type);
                         return false;
                     }
 
                     while($r = sybase_fetch_array($result)) {
                         $loop_arr[] = $r;
                     }
-                break;
+                    break;
             }
             $this->setLoop($loopname, $loop_arr);
             return true;
 			*/
 		}
 
-
 		/**
-		 * FUNCTION: newLoop
-		 *
 		 * Sets the name for the curent loop in the 3 step loop process.
-		 *
 		 * @param string $name string to define loop name
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function newLoop ($loopname) {
+		public function newLoop($loopname)
+		{
 			if (preg_match('/^[a-z_]+[a-z0-9_]*$/i', $loopname)) {
 				$this->_currloopname[$loopname] = $loopname;
 				$this->_currloop[$loopname] = array();
 				return true;
-			}
-			else {
+			} else {
 				return false;
 			}
 		}
 
-
 		/**
-		 * FUNCTION: addRow
-		 *
 		 * Adds a row to the current loop in the 3 step loop process.
-		 *
 		 * @param array $row loop row to add to current loop
 		 * @param string $loopname loop to which you want to add row, if not set will use last loop set using newLoop().
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function addRow ($row, $loopname=null) {
+		public function addRow($row, $loopname = null)
+		{
 			if (!$loopname) $loopname = $this->_currloopname[(count($this->_currloopname)-1)];
 
 			if (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) {
@@ -551,24 +533,20 @@ if (!defined('vlibTemplateClassLoaded')) {
 			if (is_array($row)) {
 				$this->_currloop[$loopname][] = $row;
 				return true;
-			}
-			else {
+			} else {
 				return false;
 			}
 		}
 
-
 		/**
-		 * FUNCTION: addLoop
-		 *
 		 * Completes the 3 step loop process. This assigns the rows and resets
 		 * the variables used.
-		 *
 		 * @param string $loopname to commit loop. If not set, will use last loopname set using newLoop()
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function addLoop ($loopname=null) {
+		public function addLoop($loopname = null)
+		{
 			if ($loopname == null) { // add last loop used
 				if (!empty($this->_currloop)) {
 					foreach ($this->_currloop as $k => $v) {
@@ -577,34 +555,28 @@ if (!defined('vlibTemplateClassLoaded')) {
 					}
 					$this->_currloopname = array();
 					return true;
-				}
-				else {
+				} else {
 					return false;
 				}
-			}
-			elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
+			} elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
 				vlibTemplateError::raiseError('VT_WARNING_LOOP_NOT_SET', WARNING);
 				return false;
-			}
-			else { // add a specific loop
+			} else { // add a specific loop
 				$this->setLoop($loopname, $this->_currloop[$loopname]);
 				unset($this->_currloopname[$loopname], $this->_currloop[$loopname]);
 			}
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: unsetLoop
-		 *
 		 * Unsets a loop which has already been set.
 		 * Can only unset top level loops.
-		 *
 		 * @param string loop to remove use: vlibTemplate::unsetLoop(loop[, loop..])
 		 * @return boolean true/false returns true unless called with 0 params
 		 * @access public
 		 */
-		function unsetLoop () {
+		public function unsetLoop()
+		{
 			$num_args = func_num_args();
 			if ($num_args < 1) return false;
 
@@ -617,17 +589,14 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: reset
-		 *
 		 * Resets the vlibTemplate object. After using vlibTemplate::reset() you must
 		 * use vlibTemplate::newTemplate(tmpl) to reuse, not passing in the options array.
-		 *
 		 * @return boolean true
 		 * @access public
 		 */
-		function reset() {
+		public function reset()
+		{
 			$this->clearVars();
 			$this->clearLoops();
 			$this->_tmplfilename = null;
@@ -643,103 +612,82 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: clearVars
-		 *
 		 * Unsets all variables in the template
-		 *
 		 * @return boolean true
 		 * @access public
 		 */
-		function clearVars () {
+		public function clearVars()
+		{
 			$this->_vars = array();
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: clearLoops
-		 *
 		 * Unsets all loops in the template
-		 *
 		 * @return boolean true
 		 * @access public
 		 */
-		function clearLoops () {
+		public function clearLoops()
+		{
 			$this->_arrvars = array();
 			$this->_currloopname = null;
 			$this->_currloop = array();
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: clearAll
-		 *
 		 * Unsets all variables and loops set using setVar/Loop()
-		 *
 		 * @return boolean true
 		 * @access public
 		 */
-		function clearAll () {
+		public function clearAll()
+		{
 			$this->clearVars();
 			$this->clearLoops();
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: unknownsExist
-		 *
 		 * Returns true if unknowns were found after parsing.
 		 * Function MUST be called AFTER one of the parsing functions to have any relevance.
-		 *
 		 * @return boolean true/false
 		 * @access public
 		 */
-		function unknownsExist () {
+		public function unknownsExist()
+		{
 			return !empty($this->_unknowns);
 		}
 
-
 		/**
-		 * FUNCTION: unknowns
-		 *
 		 * Alias for unknownsExist.
-		 *
 		 * @access public
 		 */
-		function unknowns () {
+		public function unknowns()
+		{
 			return $this->unknownsExist();
 		}
 
-
 		/**
-		 * FUNCTION: getUnknowns
-		 *
 		 * Returns an array of all unknown vars found when parsing.
 		 * This function is only relevant after parsing a document.
-		 *
 		 * @return array
 		 * @access public
 		 */
-		function getUnknowns () {
+		public function getUnknowns()
+		{
 			return $this->_unknowns;
 		}
 
-
 		/**
-		 * FUNCTION: setUnknowns
-		 *
 		 * Sets how you want to handle variables that were found in the
 		 * template but not set in vlibTemplate using vlibTemplate::setVar().
-		 *
 		 * @param  string $arg ignore, remove, print, leave or comment
 		 * @return boolean
 		 * @access public
 		 */
-		function setUnknowns ($arg) {
+		public function setUnknowns($arg)
+		{
 			$arg = strtolower(trim($arg));
 			if (preg_match('/^ignore|remove|print|leave|comment$/', $arg)) {
 				$this->OPTIONS['UNKNOWNS'] = $arg;
@@ -748,10 +696,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return false;
 		}
 
-
 		/**
-		 * FUNCTION: setPath
-		 *
 		 * function sets the paths to use when including files.
 		 * Use of this function: vlibTemplate::setPath(string path [, string path, ..]);
 		 * i.e. if $tmpl is your template object do: $tmpl->setPath('/web/htdocs/templates','/web/htdocs/www');
@@ -762,7 +707,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @return bool success
 		 * @access public
 		 */
-		function setPath () {
+		public function setPath()
+		{
 			$num_args = func_num_args();
 			if ($num_args < 1) {
 				$this->OPTIONS['INCLUDE_PATHS'] = array();
@@ -775,10 +721,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: getParseTime
-		 *
 		 * After using one of the parse functions, this will allow you
 		 * access the time taken to parse the template.
 		 * see OPTION 'TIME_PARSE'.
@@ -786,7 +729,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @return float time taken to parse template
 		 * @access public
 		 */
-		function getParseTime () {
+		public function getParseTime()
+		{
 			if ($this->OPTIONS['TIME_PARSE'] && $this->_parsed) {
 				return $this->_totalparsetime;
 			}
@@ -795,8 +739,6 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 
 		/**
-		 * FUNCTION: fastPrint
-		 *
 		 * Identical to pparse() except that it uses output buffering w/ gz compression thus
 		 * printing the output directly and compressed if poss.
 		 * Will possibly if parsing a huge template.
@@ -804,7 +746,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access public
 		 * @return boolean true/false
 		 */
-		function fastPrint () {
+		public function fastPrint()
+		{
 			$ret = $this->_parse('ob_gzhandler');
 			print($this->_tmploutput);
 			return $ret;
@@ -812,63 +755,54 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 
 		/**
-		 * FUNCTION: pparse
-		 *
 		 * Calls parse, and then prints out $this->_tmploutput
-		 *
 		 * @access public
 		 * @return boolean true/false
 		 */
-		function pparse () {
+		public function pparse()
+		{
 			if (!$this->_parsed) $this->_parse();
 			print($this->_tmploutput);
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: pprint
-		 *
 		 * Alias for pparse()
-		 *
 		 * @access public
 		 */
-		function pprint () {
+		public function pprint()
+		{
 			return $this->pparse();
 		}
 
 
 		/**
-		 * FUNCTION: grab
-		 *
 		 * Returns the parsed output, ready for printing, passing to mail() ...etc.
 		 * Invokes $this->_parse() if template has not yet been parsed.
 		 *
 		 * @access public
 		 * @return boolean true/false
 		 */
-		function grab () {
+		public function grab()
+		{
 			if (!$this->_parsed) $this->_parse();
 			return $this->_tmploutput;
 		}
 
 		/*-----------------------------------------------------------------------------\
-    |                           private functions                                  |
-    \-----------------------------------------------------------------------------*/
-
+        |                           private functions                                  |
+        \-----------------------------------------------------------------------------*/
 
 		/**
-		 * FUNCTION: vlibTemplate
-		 *
 		 * vlibTemplate constructor.
 		 * if $tmplfile has been passed to it, it will send to $this->newTemplate()
-		 *
 		 * @param string $tmplfile full path to template file
 		 * @param array $options see above
 		 * @return boolean true/false
 		 * @access private
 		 */
-		function tpl ($tmplfile=null, $options=null) {
+		public function __construct($tmplfile = null, $options = null)
+		{
 			if (is_array($tmplfile) && $options == null) {
 				$options = $tmplfile;
 				unset($tmplfile);
@@ -887,8 +821,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 					$key = strtoupper($key);
 					if ($key == 'PATH') {
 						$this->setPath($val);
-					}
-					else {
+					} else {
 						$this->_setOption($key, strtolower($val));
 					}
 				}
@@ -898,9 +831,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
-		/** FUNCTION: _getData
-		 *
+		/**
 		 * function returns the text from the file, or if we're using cache, the text
 		 * from the cache file. MUST RETURN DATA.
 		 * @param string tmplfile contains path to template file
@@ -908,13 +839,15 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return mixed data/string or boolean
 		 */
-		function _getData ($tmplfile, $do_eval=false) {
-			//check the current file depth
+		private function _getData ($tmplfile, $do_eval=false)
+		{
+			//* check the current file depth
 			if ($this->_includedepth > $this->OPTIONS['MAX_INCLUDES'] || $tmplfile == false) {
 				return;
-			}
-			else {
-				if ($this->_debug) array_push($this->_debugIncludedfiles, $tmplfile);
+			} else {
+				if ($this->_debug){
+					array_push($this->_debugIncludedfiles, $tmplfile);
+				}
 				if ($do_eval) {
 					array_push($this->_currentincludedir, dirname($tmplfile));
 					$this->_includedepth++;
@@ -922,11 +855,10 @@ if (!defined('vlibTemplateClassLoaded')) {
 			}
 
 
-			if($this->_cache && $this->_checkCache($tmplfile)) { // cache exists so lets use it
+			if($this->_cache && $this->_checkCache($tmplfile)) { //* cache exists so lets use it
 				$data = fread($fp = fopen($this->_cachefile, 'r'), filesize($this->_cachefile));
 				fclose($fp);
-			}
-			else { // no cache lets parse the file
+			} else { //* no cache lets parse the file
 				$data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile));
 				fclose($fp);
 
@@ -951,7 +883,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 				}
 			}
 
-			// now we must parse the $data and check for any <tmpl_include>'s
+			//* now we must parse the $data and check for any <tmpl_include>'s
 			if ($this->_debug) $this->doDebugWarnings(file($tmplfile), $tmplfile);
 
 			if ($do_eval) {
@@ -959,34 +891,34 @@ if (!defined('vlibTemplateClassLoaded')) {
 				$this->_includedepth--;
 				array_pop($this->_currentincludedir);
 				return $success;
-			}
-			else {
+			} else {
 				return $data;
 			}
-
 		}
 
-
 		/**
-		 * FUNCTION: _fileSearch
-		 *
 		 * Searches for all possible instances of file { $file }
-		 *
 		 * @param string $file path of file we're looking for
 		 * @access private
 		 * @return mixed fullpath to file or boolean false
 		 */
-		function _fileSearch ($file) {
+		private function _fileSearch($file)
+		{
+
 			$filename = basename($file);
 			$filepath = dirname($file);
 
-			// check fullpath first..
-			$fullpath = $filepath.'/'.$filename;
-			if (is_file($fullpath)) {
-				return $fullpath;
+			if(isset($_SESSION['s']['module']['name']) && isset($_SESSION['s']['theme'])) {
+				if(is_file(ISPC_THEMES_PATH.'/'.$_SESSION['s']['theme'].'/templates/'.$_SESSION['s']['module']['name'].'/'.$filename)) {
+					return ISPC_THEMES_PATH.'/'.$_SESSION['s']['theme'].'/templates/'.$_SESSION['s']['module']['name'].'/'.$filename;
+				}
 			}
 
-			// ..then check for relative path for current directory..
+			//* check fullpath first..
+			$fullpath = $filepath.'/'.$filename;
+			if (is_file($fullpath)) return $fullpath;
+
+			//* ..then check for relative path for current directory..
 			if (!empty($this->_currentincludedir)) {
 				$currdir = $this->_currentincludedir[(count($this->_currentincludedir) -1)];
 				$relativepath = realpath($currdir.'/'.$filepath.'/'.$filename);
@@ -996,7 +928,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 				}
 			}
 
-			// ..then check for relative path for all additional given paths..
+			//* ..then check for relative path for all additional given paths..
 			if (!empty($this->OPTIONS['INCLUDE_PATHS'])) {
 				foreach ($this->OPTIONS['INCLUDE_PATHS'] as $currdir) {
 					$relativepath = realpath($currdir.'/'.$filepath.'/'.$filename);
@@ -1006,44 +938,35 @@ if (!defined('vlibTemplateClassLoaded')) {
 				}
 			}
 
-			// ..then check path from TEMPLATE_DIR..
+			//* ..then check path from TEMPLATE_DIR..
 			if (!empty($this->OPTIONS['TEMPLATE_DIR'])) {
 				$fullpath = realpath($this->OPTIONS['TEMPLATE_DIR'].'/'.$filepath.'/'.$filename);
-				if (is_file($fullpath)) {
-					return $fullpath;
-				}
+				if (is_file($fullpath)) return $fullpath;
 			}
 
-			// ..then check relative path from executing php script..
+			//* ..then check relative path from executing php script..
 			$fullpath = realpath($filepath.'/'.$filename);
-			if (is_file($fullpath)) {
-				return $fullpath;
-			}
+			if (is_file($fullpath)) return $fullpath;
 
-			// ..then check path from template file.
+			//* ..then check path from template file.
 			if (!empty($this->VLIBTEMPLATE_ROOT)) {
 				$fullpath = realpath($this->VLIBTEMPLATE_ROOT.'/'.$filepath.'/'.$filename);
-				if (is_file($fullpath)) {
-					return $fullpath;
-				}
+				if (is_file($fullpath)) return $fullpath;
 			}
 
 			return false; // uh oh, file not found
 		}
 
-
 		/**
-		 * FUNCTION: _arrayBuild
-		 *
 		 * Modifies the array $arr to add Template variables, __FIRST__, __LAST__ ..etc
 		 * if $this->OPTIONS['LOOP_CONTEXT_VARS'] is true.
 		 * Used by $this->setloop().
-		 *
 		 * @param array $arr
 		 * @return array new look array
 		 * @access private
 		 */
-		function _arrayBuild ($arr) {
+		private function _arrayBuild($arr)
+		{
 			if (is_array($arr) && !empty($arr)) {
 				$arr = array_values($arr); // to prevent problems w/ non sequential arrays
 				for ($i = 0; $i < count($arr); $i++) {
@@ -1055,8 +978,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 						if (is_array($v)) {
 							if (($arr[$i][$k] = $this->_arrayBuild($v)) == false) return false;
-						}
-						else { // reinsert the var
+						} else { // reinsert the var
 							$arr[$i][$k] = $v;
 						}
 					}
@@ -1070,17 +992,13 @@ if (!defined('vlibTemplateClassLoaded')) {
 					}
 				}
 				return $arr;
-			}
-			elseif (empty($arr)) {
+			} elseif (empty($arr)) {
 				return true;
 			}
 		}
 
-
 		/**
-		 * FUNCTION: _parseIf
 		 * returns a string used for parsing in tmpl_if statements.
-		 *
 		 * @param string $varname
 		 * @param string $value
 		 * @param string $op
@@ -1088,7 +1006,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return string used for eval'ing
 		 */
-		function _parseIf ($varname, $value=null, $op=null, $namespace=null, $format=null) {
+		private function _parseIf($varname, $value = null, $op = null, $namespace = null, $format = null)
+		{
 			if (isset($namespace)) $namespace = substr($namespace, 0, -1);
 			$comp_str = ''; // used for extended if statements
 
@@ -1099,20 +1018,17 @@ if (!defined('vlibTemplateClassLoaded')) {
 				if (!empty($op)) {
 					if (in_array($op, $this->allowed_if_ops)) {
 						$comp_str .= $op;
-					}
-					else {
+					} else {
 						vlibTemplateError::raiseError('VT_WARNING_INVALID_IF_OP', WARNING, $op);
 					}
-				}
-				else {
+				} else {
 					$comp_str .= '==';
 				}
 
 				// now we add the value, if it's numeric, then we leave the quotes off
 				if (is_numeric($value)) {
 					$comp_str .= $value;
-				}
-				else {
+				} else {
 					$comp_str .= '\''.$value.'\'';
 				}
 			}
@@ -1124,22 +1040,21 @@ if (!defined('vlibTemplateClassLoaded')) {
 				if ($this->_namespace[$i] == $namespace || (($i + 1) == $numnamespaces && !empty($namespace))) {
 					$retstr .= "['".$namespace."'][\$_".$i."]";
 					break 1;
-				}
-				else {
+				} else {
 					$retstr .= "['".$this->_namespace[$i]."'][\$_".$i."]";
 				}
 			}
 			if ($this->OPTIONS['GLOBAL_VARS'] && empty($namespace)) {
 				$retstr = '(('.$retstr.'[\''.$varname.'\'] !== null) ? '.$retstr.'[\''.$varname.'\'] : $this->_vars[\''.$varname.'\'])';
 				if(isset($format) && isset($value) && $format == 'version') {
-					return 'version_compare(' . $retstr . ', \'' . $value . '\', ' . (!empty($op) ? $op : '==') . ')';
+					return 'version_compare(' . $retstr . ', \'' . $value . '\', \'' . (!empty($op) ? $op : '==') . '\')';
 				} else {
 					return $retstr.$comp_str;
 				}
 			}
 			else {
 				if(isset($format) && isset($value) && $format == 'version') {
-					return 'version_compare(' . $retstr."['".$varname."']" . ', \'' . $value . '\', ' . (!empty($op) ? $op : '==') . ')';
+					return 'version_compare(' . $retstr."['".$varname."']" . ', \'' . $value . '\', \'' . (!empty($op) ? $op : '==') . '\')';
 				} else {
 					return $retstr."['".$varname."']".$comp_str;
 				}
@@ -1148,14 +1063,13 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 
 		/**
-		 * FUNCTION: _parseLoop
 		 * returns a string used for parsing in tmpl_loop statements.
-		 *
 		 * @param string $varname
 		 * @access private
 		 * @return string used for eval'ing
 		 */
-		function _parseLoop ($varname) {
+		private function _parseLoop ($varname)
+		{
 			array_push($this->_namespace, $varname);
 			$tempvar = count($this->_namespace) - 1;
 			$retstr = "for (\$_".$tempvar."=0 ; \$_".$tempvar." < count(\$this->_arrvars";
@@ -1166,12 +1080,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return $retstr."); \$_".$tempvar."++) {";
 		}
 
-
 		/**
-		 * FUNCTION: _parseVar
-		 *
 		 * returns a string used for parsing in tmpl_var statements.
-		 *
 		 * @param string $wholetag
 		 * @param string $tag
 		 * @param string $varname
@@ -1181,22 +1091,21 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return string used for eval'ing
 		 */
-		function _parseVar ($wholetag, $tag, $varname, $escape, $format, $namespace) {
+		private function _parseVar ($wholetag, $tag, $varname, $escape, $format, $namespace)
+		{
 			if (!empty($namespace)) $namespace = substr($namespace, 0, -1);
 			$wholetag = stripslashes($wholetag);
 
 			if (count($this->_namespace) == 0 || $namespace == 'global') {
 				$var1 = '$this->_vars[\''.$varname.'\']';
-			}
-			else {
+			} else {
 				$var1build = "\$this->_arrvars";
 				$numnamespaces = count($this->_namespace);
 				for ($i=0; $i < $numnamespaces; $i++) {
 					if ($this->_namespace[$i] == $namespace || (($i + 1) == $numnamespaces && !empty($namespace))) {
 						$var1build .= "['".$namespace."'][\$_".$i."]";
 						break 1;
-					}
-					else {
+					} else {
 						$var1build .= "['".$this->_namespace[$i]."'][\$_".$i."]";
 					}
 				}
@@ -1218,7 +1127,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 				$aftervar   = $this->FORMAT_TAGS[$format]['close'] . $aftervar;
 			}
 
-			// build return values
+			//* build return values
 			$retstr  = 'if ('.$var1.' !== null) { ';
 			$retstr .= 'print('.$beforevar.$var1.$aftervar.'); ';
 			$retstr .= '}';
@@ -1234,30 +1143,27 @@ if (!defined('vlibTemplateClassLoaded')) {
 				$comment = addcslashes('<!-- unknown variable '.preg_replace('/<!--|-->/', '', $wholetag).'//-->', '"');
 				$retstr .= ' else { print("'.$comment.'"); $this->_setUnknown("'.$varname.'"); }';
 				return $retstr;
-				break;
+
 			case 'leave':
 				$retstr .= ' else { print("'.addcslashes($wholetag, '"').'"); $this->_setUnknown("'.$varname.'"); }';
 				return $retstr;
-				break;
+
 			case 'print':
 				$retstr .= ' else { print("'.htmlspecialchars($wholetag, ENT_QUOTES).'"); $this->_setUnknown("'.$varname.'"); }';
 				return $retstr;
-				break;
 
 			case 'ignore':
 				return $retstr;
-				break;
+
 			case 'remove':
 			default:
 				$retstr .= ' else { $this->_setUnknown("'.$varname.'"); }';
 				return $retstr;
-				break;
+
 			}
 		}
 
-
 		/**
-		 * FUNCTION: _parseTag
 		 * takes values from preg_replace in $this->_intparse() and determines
 		 * the replace string.
 		 *
@@ -1265,7 +1171,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return string replace values
 		 */
-		function _parseTag ($args) {
+		private function _parseTag ($args)
+		{
 			$wholetag = $args[0];
 			$openclose = $args[1];
 			$tag = strtolower($args[2]);
@@ -1277,8 +1184,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 				if ($tag == 'loop' || $tag == 'endloop') array_pop($this->_namespace);
 				if ($tag == 'comment' || $tag == 'endcomment') {
 					return '<?php */ ?>';
-				}
-				else {
+				} else {
 					return '<?php } ?>';
 				}
 			}
@@ -1317,53 +1223,43 @@ if (!defined('vlibTemplateClassLoaded')) {
 			}
 
 
-			// return correct string (tag dependent)
+			//* return correct string (tag dependent)
 			switch ($tag) {
 			case 'var':
 				if (empty($escape) && (!empty($this->OPTIONS['DEFAULT_ESCAPE']) && strtolower($this->OPTIONS['DEFAULT_ESCAPE']) != 'none')) {
 					$escape = strtolower($this->OPTIONS['DEFAULT_ESCAPE']);
 				}
-				return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'."\n";
-				break;
+				return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace)." ?>\n";
 
 			case 'if':
 				return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'unless':
 				return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'elseif':
 				return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
-				break;
 
 			case 'loop':
 				return '<?php '. $this->_parseLoop($var) .'?>';
-				break;
 
 			case 'comment':
 				if (empty($var)) { // full open/close style comment
 					return '<?php /* ?>';
-				}
-				else { // just ignore tag if it was a one line comment
+				} else { // just ignore tag if it was a one line comment
 					return;
 				}
-				break;
 
 			case 'phpinclude':
 				if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
 					return '<?php include(\''.$file.'\'); ?>';
 				}
-				break;
 
 			case 'include':
 				return '<?php $this->_getData($this->_fileSearch(\''.$file.'\'), 1); ?>';
-				break;
 
 			case 'dyninclude':
 				return '<?php $this->_getData($this->_fileSearch($this->_dyninclude[\''.$name.'\']), 1); ?>';
-				break;
 
 			default:
 				if ($this->OPTIONS['STRICT']) vlibTemplateError::raiseError('VT_ERROR_INVALID_TAG', KILL, htmlspecialchars($wholetag, ENT_QUOTES));
@@ -1372,10 +1268,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 		}
 
-
 		/**
-		 * FUNCTION: _intParse
-		 *
 		 * Parses $this->_tmplfile into correct format for eval() to work
 		 * Called by $this->_parse(), or $this->fastPrint, this replaces all <tmpl_*> references
 		 * with their correct php representation, i.e. <tmpl_var title> becomes $this->vars['title']
@@ -1384,7 +1277,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return boolean true/false
 		 */
-		function _intParse () {
+		private function _intParse ()
+		{
 			//$mqrt = get_magic_quotes_runtime();
 			//set_magic_quotes_runtime(0);
 			$this->_tmplfilep = '?>'.$this->_getData($this->_tmplfilename).'<?php return true;';
@@ -1392,10 +1286,7 @@ if (!defined('vlibTemplateClassLoaded')) {
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: _parse
-		 *
 		 * Calls _intParse, and eval()s $this->tmplfilep
 		 * and outputs the results to $this->tmploutput
 		 *
@@ -1403,7 +1294,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @access private
 		 * @return boolean true/false
 		 */
-		function _parse ($compress='') {
+		private function _parse ($compress = '')
+		{
 			if (!$this->_parsed) {
 				if ($this->OPTIONS['TIME_PARSE']) $this->_firstparsetime = $this->_getMicroTime();
 
@@ -1427,16 +1319,10 @@ if (!defined('vlibTemplateClassLoaded')) {
 			if (!$success) vlibTemplateError::raiseError('VT_ERROR_PARSE', FATAL);
 			$this->_tmploutput .= ob_get_contents();
 			ob_end_clean();
-
-
-
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: _setOption
-		 *
 		 * Sets one or more of the boolean options 1/0, that control certain actions in the template.
 		 * Use of this function:
 		 * either: vlibTemplate::_setOptions(string option_name, bool option_val [, string option_name, bool option_val ..]);
@@ -1448,7 +1334,8 @@ if (!defined('vlibTemplateClassLoaded')) {
 		 * @return bool true/false
 		 * @access private
 		 */
-		function _setOption () {
+		private function _setOption()
+		{
 			$numargs = func_num_args();
 			if ($numargs < 1) {
 				vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
@@ -1461,18 +1348,15 @@ if (!defined('vlibTemplateClassLoaded')) {
 					foreach ($options as $k => $v) {
 						if ($v != null) {
 							if(in_array($k, array_keys($this->OPTIONS))) $this->OPTIONS[$k] = $v;
-						}
-						else {
+						} else {
 							continue;
 						}
 					}
-				}
-				else {
+				} else {
 					vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
 					return false;
 				}
-			}
-			elseif (is_int($numargs / 2)) {
+			}elseif (is_int($numargs / 2)) {
 				for ($i = 0; $i < $numargs; $i=($i+2)) {
 					$k  = func_get_arg($i);
 					$v = func_get_arg(($i+1));
@@ -1480,52 +1364,43 @@ if (!defined('vlibTemplateClassLoaded')) {
 						if(in_array($k, array_keys($this->OPTIONS))) $this->OPTIONS[$k] = $v;
 					}
 				}
-			}
-			else {
+			} else {
 				vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
 				return false;
 			}
 			return true;
 		}
 
-
 		/**
-		 * FUNCTION: _setUnknown
-		 *
 		 * Used during parsing, this function sets an unknown var checking to see if it
 		 * has been previously set.
-		 *
 		 * @param string var
 		 * @access private
 		 */
-		function _setUnknown ($var) {
+		private function _setUnknown($var)
+		{
 			if (!in_array($var, $this->_unknowns)) array_push($this->_unknowns, $var);
 		}
 
-
 		/**
-		 * FUNCTION: _getMicrotime
 		 * Returns microtime as a float number
-		 *
 		 * @return float microtime
 		 * @access private
 		 */
-		function _getMicrotime () {
-			list($msec, $sec) = explode(" ", microtime());
+		private function _getMicrotime()
+		{
+			list($msec, $sec) = explode(' ', microtime());
 			return (float)$msec + (float)$sec;
 		}
 
-
 		/**
-		 * FUNCTION: _escape_hex
 		 * Returns str encoded to hex code.
-		 *
 		 * @param string str to be encoded
 		 * @param bool true/false specify whether to use hex_entity
 		 * @return string encoded in hex
 		 * @access private
 		 */
-		function _escape_hex($str="", $entity=false) {
+		private  function _escape_hex($str = '', $entity = false) {
 			$prestr = $entity ? '&#x' : '%';
 			$poststr= $entity ? ';' : '';
 			for ($i=0; $i < strlen($str); $i++) {
@@ -1547,10 +1422,10 @@ if (!defined('vlibTemplateClassLoaded')) {
 
 		function setCacheExtension() {vlibTemplateError::raiseError('VT_WARNING_NOT_CACHE_OBJ', WARNING, 'setCacheExtension()');}
 
-	}
+	} // << end class Def
 
-	//include_once ($conf['classpath'].'/vlibTemplate/debug.php');
-	include_once $conf['classpath'].'/tpl_cache.inc.php';
+	//include_once (ISPC_CLASS_PATH.'/vlibTemplate/debug.php');
+	include_once ISPC_CLASS_PATH.'/tpl_cache.inc.php';
 
 } // << end if(!defined())..
 ?>