diff --git a/api/api.inc.php b/api/api.inc.php
index d209860d5c60bff7d55c3032144ea675b4de6767..926a0e2a9ddb4b0464c5f1385e56665312339d8e 100644
--- a/api/api.inc.php
+++ b/api/api.inc.php
@@ -36,13 +36,13 @@ define('OSTAPIINC',TRUE); // Define tag that included files can check
 $remotehost=(isset($_SERVER['HTTP_HOST']) || isset($_SERVER['REMOTE_ADDR']))?TRUE:FALSE;
 /* API exit helper */
 function api_exit($code,$msg='') {
-    global $remotehost,$cfg;
+    global $remotehost, $ost;
     
     if($code!=EX_SUCCESS) {
         //Error occured...
         $_SESSION['api']['errors']+=1;
         $_SESSION['api']['time']=time();
-        Sys::log(LOG_WARNING,"API error - code #$code",$msg);
+        $ost->logWarning("API error - code #$code",$msg);
         //echo "API Error:.$msg";
     }
     if($remotehost){
diff --git a/api/cron.php b/api/cron.php
index 86de02cdb6e32a4f3f61e5fc87a2567133694f82..a8874e3b7eb45eb246145e756db8f85c91c1e47a 100644
--- a/api/cron.php
+++ b/api/cron.php
@@ -17,5 +17,5 @@
 require('api.inc.php');
 require_once(INCLUDE_DIR.'class.cron.php');
 Cron::run();
-Sys::log(LOG_DEBUG,'Cron Job','External cron job executed ['.$_SERVER['REMOTE_ADDR'].']');
+$ost->logDebug('Cron Job','External cron job executed ['.$_SERVER['REMOTE_ADDR'].']');
 ?>
diff --git a/client.inc.php b/client.inc.php
index 3b450e9e2491653ec44c65f346ef79758cc1d1a8..1908eaa1b5d5172fffaccfbee69f6f17e4871d1e 100644
--- a/client.inc.php
+++ b/client.inc.php
@@ -29,7 +29,7 @@ define('OSTCLIENTINC',TRUE);
 define('ASSETS_PATH',ROOT_PATH.'assets/default/');
 
 //Check the status of the HelpDesk.
-if(!is_object($cfg) || !$cfg->getId() || $cfg->isHelpDeskOffline() || $cfg->isUpgradePending()) {
+if(!is_object($ost) || !$ost->isSystemOnline()) {
     include('./offline.php');
     exit;
 }
diff --git a/include/class.config.php b/include/class.config.php
index 061390bc9f0954784ac96a4bb2e8256fd3f66acb..cb7cd40aed575013ee1db136d15037438d6b34fb 100644
--- a/include/class.config.php
+++ b/include/class.config.php
@@ -57,19 +57,15 @@ class Config {
     }
 
     function isHelpDeskOffline() {
-        return !$this->isSystemOnline();
+        return !$this->isOnline();
     }
 
     function isHelpDeskOnline() {
-        return $this->isSystemOnline();
+        return $this->isOnline();
     }
 
-    function isSystemOnline() {
-        return ($this->config['isonline'] && !$this->isUpgradePending());
-    }
-
-    function isUpgradePending() {
-        return (defined('SCHEMA_SIGNATURE') && strcasecmp($this->getSchemaSignature(), SCHEMA_SIGNATURE));
+    function isOnline() {
+        return ($this->config['isonline']);
     }
 
     function isKnowledgebaseEnabled() {
@@ -125,6 +121,14 @@ class Config {
     function getId() {
         return $this->id;
     }
+
+    function getConfigId() {
+        return $this->getId();
+    }
+
+    function getConfigInfo() {
+        return $this->config;
+    }
    
     function getTitle() {
         return $this->config['helpdesk_title'];
@@ -138,10 +142,6 @@ class Config {
         return rtrim($this->getUrl(),'/');
     }
 
-    function getConfig() {
-        return $this->config;
-    }
-
     function getTZOffset() {
         return $this->config['timezone_offset'];
     }
diff --git a/include/class.cron.php b/include/class.cron.php
index ddc4d2973e77ff93f6f83a4a3fefd6b4b9b82814..c8e3a81def985b99eb0f21eaea8751362e1ced05 100644
--- a/include/class.cron.php
+++ b/include/class.cron.php
@@ -31,7 +31,8 @@ class Cron {
     }
 
     function PurgeLogs() {
-        Sys::purgeLogs();
+        global $ost;
+        if($ost) $ost->purgeLogs();
     }
 
     function CleanOrphanedFiles() {
diff --git a/include/class.email.php b/include/class.email.php
index 0b4317f7e6e6dc82866288fc88631ff601b5753f..dba9a45d5d4c569c9a5e7b2c17c4254f12abdcee 100644
--- a/include/class.email.php
+++ b/include/class.email.php
@@ -122,7 +122,7 @@ class Email {
     }
 
     function send($to, $subject, $message, $attachments=null, $options=null) {
-        global $cfg;
+        global $cfg, $ost;
 
         //Get SMTP info IF enabled!
         $smtp=array();
@@ -149,11 +149,12 @@ class Email {
         $headers = array ('From' => $from,
                           'To' => $to,
                           'Subject' => $subject,
-                          'Date'=>date('D,d M Y H:i:s O'),
+                          'Date'=>date('D, d M Y H:i:s O'),
                           'Message-ID' =>'<'.Misc::randCode(6).''.time().'-'.$this->getEmail().'>',
                           'X-Mailer' =>'osTicket v1.7',
                           'Content-Type' => 'text/html; charset="UTF-8"'
                           );
+
         $mime = new Mail_mime();
         $mime->setTXTBody($body);
         //XXX: Attachments
@@ -189,8 +190,9 @@ class Email {
             if(!PEAR::isError($result))
                 return true;
 
+            //SMTP failed - log error.
             $alert=sprintf("Unable to email via %s:%d [%s]\n\n%s\n",$smtp['host'],$smtp['port'],$smtp['username'],$result->getMessage());
-            Sys::log(LOG_ALERT,'SMTP Error',$alert,false);
+            $ost->logError('SMTP Error', $alert, false); //NOTE: email alert overwrite - don't email when having email trouble.
             //print_r($result);
         }
 
@@ -292,6 +294,7 @@ class Email {
         //very basic checks
 
         $vars['name']=Format::striptags(trim($vars['name']));
+        $vars['email']=trim($vars['email']);
 
         if($id && $id!=$vars['id'])
             $errors['err']='Internal error. Get technical help.';
@@ -300,7 +303,7 @@ class Email {
             $errors['email']='Valid email required';
         }elseif(($eid=Email::getIdByEmail($vars['email'])) && $eid!=$id) {
             $errors['email']='Email already exits';
-        }elseif($cfg && !strcasecmp($cfg->getAdminEmail(),$vars['email'])) {
+        }elseif($cfg && !strcasecmp($cfg->getAdminEmail(), $vars['email'])) {
             $errors['email']='Email already used as admin email!';
         }elseif(Staff::getIdByEmail($vars['email'])) { //make sure the email doesn't belong to any of the staff 
             $errors['email']='Email in-use by a staff member';
diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php
index f25d72b26236471dd6b14e365a1745067ffe6f3e..a353b690be55c3f9cbd3740b6edcc7164dabc16e 100644
--- a/include/class.mailfetch.php
+++ b/include/class.mailfetch.php
@@ -255,7 +255,7 @@ class MailFetcher {
     }
 
     function createTicket($mid,$emailid=0){
-        global $cfg;
+        global $cfg, $ost;
 
         $mailinfo=$this->getHeaderInfo($mid);
 
@@ -265,11 +265,11 @@ class MailFetcher {
             return true;
         }
 
-	//Is the email address banned?
+	    //Is the email address banned?
         if($mailinfo['from']['email'] && EmailFilter::isBanned($mailinfo['from']['email'])) {
-	    //We need to let admin know...
-            Sys::log(LOG_WARNING,'Ticket denied','Banned email - '.$mailinfo['from']['email']);
-	    return true;
+	        //We need to let admin know...
+            $ost->logWarning('Ticket denied', 'Banned email - '.$mailinfo['from']['email']);
+	        return true;
         }
 	
 
@@ -370,15 +370,15 @@ class MailFetcher {
     }
 
     function fetchMail(){
-        global $cfg;
+        global $ost, $cfg;
       
         if(!$cfg->canFetchMail())
             return;
 
         //We require imap ext to fetch emails via IMAP/POP3
         if(!function_exists('imap_open')) {
-            $msg='PHP must be compiled with IMAP extension enabled for IMAP/POP3 fetch to work!';
-            Sys::log(LOG_WARN,'Mail Fetch Error',$msg);
+            $msg='osTicket requires PHP IMAP extension enabled for IMAP/POP3 fetch to work!';
+            $ost->logWarning('Mail Fetch Error', $msg);
             return;
         }
 
@@ -393,7 +393,7 @@ class MailFetcher {
 
         //TODO: Lock the table here??
         while($row=db_fetch_array($accounts)) {
-            $fetcher = new MailFetcher($row['userid'],Misc::decrypt($row['userpass'],SECRET_SALT),
+            $fetcher = new MailFetcher($row['userid'], Mcrypt::decrypt($row['userpass'],SECRET_SALT),
                                        $row['mail_host'],$row['mail_port'],$row['mail_protocol'],$row['mail_encryption']);
             if($fetcher->connect()){   
                 $fetcher->fetchTickets($row['email_id'],$row['mail_fetchmax'],$row['mail_delete']?true:false,$row['mail_archivefolder']);
@@ -410,7 +410,7 @@ class MailFetcher {
                         "\nError: ".$fetcher->getLastError().
                         "\n\n ".$errors.' consecutive errors. Maximum of '.$MAX_ERRORS. ' allowed'.
                         "\n\n This could be connection issues related to the host. Next delayed login attempt in aprox. 10 minutes";
-                    Sys::alertAdmin('Mail Fetch Failure Alert',$msg,true);
+                    $ost->alertAdmin('Mail Fetch Failure Alert', $msg, true);
                 }
             }
         }
diff --git a/include/class.mcrypt.php b/include/class.mcrypt.php
index a6a9791019d92ea2165b92c4ccd7e7e908380b6e..13d56a7df32e22ffe5abff5c5a6bf195cc58749d 100644
--- a/include/class.mcrypt.php
+++ b/include/class.mcrypt.php
@@ -15,20 +15,25 @@
 **********************************************************************/
 class Mcrypt {
     
-    function encrypt($text, $salt){
+    function encrypt($text, $salt) {
+        global $ost;
+        
+        //if mcrypt extension is not installed--simply return unencryted text and log a warning (if enabled).
+        if(!function_exists('mcrypt_encrypt') || !function_exists('mcrypt_decrypt')) {
+            if($ost) {
+                $msg='Cryptography extension mcrypt is not enabled or installed. Important text/data is being stored as plain text in database.';
+                $ost->logWarning('mcrypt module missing', $msg);
+            }
 
-        //if mcrypt extension is not installed--simply return unencryted text and log a warning.
-        if(!function_exists('mcrypt_encrypt') || !function_exists('mcrypt_decrypt')){
-            $msg='Cryptography extension mcrypt is not enabled or installed. Important text/data is being stored as plain text in database.';
-            Sys::log(LOG_WARN,'mcrypt module missing',$msg);
             return $text;
         }
 
-        return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$salt, $text, MCRYPT_MODE_ECB,
+        return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB,
                          mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
     }
 
-    function decrypt($text, $salt){
+    function decrypt($text, $salt) {
+
         if(!function_exists('mcrypt_encrypt') || !function_exists('mcrypt_decrypt'))
             return $text;
 
diff --git a/include/class.ostsession.php b/include/class.ostsession.php
index ccbae6e03f90147f06b24a79b0e1468faae4f821..0bcd9449fb234c6b9a895da6b046527f7a7909a4 100644
--- a/include/class.ostsession.php
+++ b/include/class.ostsession.php
@@ -53,9 +53,11 @@ class osTicketSession {
         return (true);
     }
  
-    function read($session_id){
+    function read($id){
         $data="";
-        $sql='SELECT session_data FROM '.SESSION_TABLE.' WHERE session_id='.db_input($session_id).' AND session_expire>NOW()';
+        $sql='SELECT session_data FROM '.SESSION_TABLE
+            .' WHERE session_id='.db_input($id)
+            .'  AND session_expire>NOW()';
         if(($res=db_query($sql)) && db_num_rows($res))
             list($data)=db_fetch_row($res);
 
@@ -63,7 +65,7 @@ class osTicketSession {
     }
 
     function write($id, $data){
-        global $cfg,$thisstaff;
+        global $thisstaff;
 
         $sql='REPLACE INTO '.SESSION_TABLE.' SET session_updated=NOW() '.
              ',session_id='.db_input($id).
@@ -98,8 +100,9 @@ class osTicketSession {
             $sql.=" AND TIME_TO_SEC(TIMEDIFF(NOW(),session_updated))<$sec";
 
         $users=array();
-        if(($res=db_query($sql)) && db_num_rows($res)){
-            list($users[])=db_fetch_row($res);
+        if(($res=db_query($sql)) && db_num_rows($res)) {
+            while(list($uid)=db_fetch_row($res))
+                $users[] = $uid;
         }
 
         return $users;
diff --git a/include/class.staff.php b/include/class.staff.php
index cf97785eb8470859a4b8e2206863ee81479e05d2..bd7379ed95e659fbf0c2c527735376f831238e89 100644
--- a/include/class.staff.php
+++ b/include/class.staff.php
@@ -95,7 +95,8 @@ class Staff {
     /* check if passwd reset is due. */
     function isPasswdResetDue() {
         global $cfg;
-        return ($cfg && $cfg->getPasswdResetPeriod() && $this->ht['passwd_change_sec']>($cfg->getPasswdResetPeriod()*30*24*60*60));
+        return ($cfg && $cfg->getPasswdResetPeriod() 
+                    && $this->ht['passwd_change_sec']>($cfg->getPasswdResetPeriod()*30*24*60*60));
     }
 
     function isPasswdChangeDue() {
@@ -495,7 +496,7 @@ class Staff {
     }
 
     function login($username, $passwd, &$errors, $strike=true) {
-        global $cfg, $session;
+        global $ost, $cfg;
 
 
         if($_SESSION['_staff']['laststrike']) {
@@ -521,12 +522,15 @@ class Staff {
             $user->refreshSession(); //set the hash.
             $_SESSION['TZ_OFFSET']=$user->getTZoffset();
             $_SESSION['TZ_DST']=$user->observeDaylight();
-            Sys::log(LOG_DEBUG,'Staff login',sprintf("%s logged in [%s]", $user->getUserName(), $_SERVER['REMOTE_ADDR'])); //Debug.
+
+            $ost->logDebug('Staff login', 
+                    sprintf("%s logged in [%s]", $user->getUserName(), $_SERVER['REMOTE_ADDR'])); //Debug.
             $sid=session_id(); //Current ID
             session_regenerate_id(TRUE);
             //Destroy old session ID - needed for PHP version < 5.1.0 TODO: remove when we move to php 5.3 as min. requirement.
-            if($session && is_object($session) && $sid)
+            if(($session=$ost->getSession()) && is_object($session) && $sid)
                 $session->destroy($sid);
+
             session_write_close();
         
             return $user;
@@ -540,12 +544,12 @@ class Staff {
             $alert='Excessive login attempts by a staff member?'."\n".
                    'Username: '.$_POST['username']."\n".'IP: '.$_SERVER['REMOTE_ADDR']."\n".'TIME: '.date('M j, Y, g:i a T')."\n\n".
                    'Attempts #'.$_SESSION['_staff']['strikes']."\n".'Timeout: '.($cfg->getStaffLoginTimeout()/60)." minutes \n\n";
-            Sys::log(LOG_ALERT,'Excessive login attempts ('.$_POST['username'].')', $alert,($cfg->alertONLoginError()));
+            $ost->logWarning('Excessive login attempts ('.$_POST['username'].')', $alert, ($cfg->alertONLoginError()));
     
         } elseif($_SESSION['_staff']['strikes']%2==0) { //Log every other failed login attempt as a warning.
             $alert='Username: '.$_POST['username']."\n".'IP: '.$_SERVER['REMOTE_ADDR'].
                    "\n".'TIME: '.date('M j, Y, g:i a T')."\n\n".'Attempts #'.$_SESSION['_staff']['strikes'];
-            Sys::log(LOG_WARNING,'Failed staff login attempt ('.$_POST['username'].')', $alert);
+            $ost->logWarning('Failed staff login attempt ('.$_POST['username'].')', $alert, false);
         }
 
         return false;
diff --git a/include/class.template.php b/include/class.template.php
index 36d9b2f4845d3ca14ad564c9a8c829c11b9ab083..fa8d070d544c4bf5eda0da758fed814f106c529d 100644
--- a/include/class.template.php
+++ b/include/class.template.php
@@ -91,11 +91,12 @@ class Template {
         return (db_query($sql) && db_affected_rows());
     }
 
-    function getMsgTemplate($name){
+    function getMsgTemplate($name) {
+        global $ost;
 
         //TODO: Don't preload - do ondemand fetch!
         $tpl=array();
-        switch(strtolower($name)){
+        switch(strtolower($name)) {
             case 'ticket_autoresp':
                  $tpl=array('subj'=>$this->ht['ticket_autoresp_subj'],'body'=>$this->ht['ticket_autoresp_body']);
                  break;
@@ -130,7 +131,7 @@ class Template {
                  $tpl=array('subj'=>$this->ht['ticket_overdue_subj'],'body'=>$this->ht['ticket_overdue_body']);
                  break;
             default:
-                 Sys::log(LOG_WARNING,'Template Fetch Error',"Unable to fetch '$name' template - id #".$this->getId());
+                 $ost->logWarning('Template Fetch Error', "Unable to fetch '$name' template - id #".$this->getId());
                  $tpl=array();
         }
 
@@ -197,7 +198,7 @@ class Template {
         if($errors) return false;
 
         $sql='UPDATE '.EMAIL_TEMPLATE_TABLE.' SET updated=NOW() ';
-        switch(strtolower($vars['tpl'])){
+        switch(strtolower($vars['tpl'])) {
             case 'ticket_autoresp':
                 $sql.=',ticket_autoresp_subj='.db_input($vars['subj']).',ticket_autoresp_body='.db_input($vars['body']);
                 break;
@@ -326,8 +327,8 @@ class Template {
         return ($id && is_numeric($id) && ($t= new Template($id)) && $t->getId()==$id)?$t:null;
     }
 
-    function save($id,$vars,&$errors) {
-        global $cfg;
+    function save($id, $vars, &$errors) {
+        global $ost;
 
         $tpl=null;
         $vars['name']=Format::striptags(trim($vars['name']));
@@ -354,12 +355,14 @@ class Template {
             $sql='UPDATE '.EMAIL_TEMPLATE_TABLE.' SET '.$sql.' WHERE tpl_id='.db_input($id);
             if(db_query($sql))
                 return true;
+
             $errors['err']='Unable to update the template. Internal error occurred';
-        }elseif($tpl && ($info=$tpl->getInfo())){
+        
+        } elseif($tpl && ($info=$tpl->getInfo())) {
 
             $sql='INSERT INTO '.EMAIL_TEMPLATE_TABLE.' SET '.$sql
                 .' ,created=NOW() '
-                .' ,cfg_id='.db_input($cfg->getId())
+                .' ,cfg_id='.db_input($ost->getConfigId())
                 .' ,ticket_autoresp_subj='.db_input($info['ticket_autoresp_subj'])
                 .' ,ticket_autoresp_body='.db_input($info['ticket_autoresp_body'])
                 .' ,ticket_notice_subj='.db_input($info['ticket_notice_subj'])
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 6a27d981bb24bdc7f05a6c8adec30615f0f7ed24..8be88bee75840140feced0586d520a615b845f52 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -885,11 +885,11 @@ class Ticket{
     }
 
     function onOpenLimit($sendNotice=true) {
-        global $cfg;
+        global $ost, $cfg;
 
         //Log the limit notice as a warning for admin.
         $msg=sprintf('Max open tickets (%d) reached  for %s ', $cfg->getMaxOpenTickets(), $this->getEmail());
-        sys::log(LOG_WARNING, 'Max. Open Tickets Limit ('.$this->getEmail().')', $msg);
+        $ost->logWarning('Max. Open Tickets Limit ('.$this->getEmail().')', $msg);
 
         if(!$sendNotice || !$cfg->sendOverLimitNotice()) return true;
 
@@ -916,7 +916,7 @@ class Ticket{
             .'Open ticket: '.$client->getNumOpenTickets()."\n"
             .'Max Allowed: '.$cfg->getMaxOpenTickets()."\n\nNotice sent to the user.";
             
-        Sys::alertAdmin('Overlimit Notice',$msg);
+        $ost->alertAdmin('Overlimit Notice', $msg);
        
         return true;
     }
@@ -1803,7 +1803,7 @@ class Ticket{
      *  $autorespond and $alertstaff overwrites config settings...
      */      
     function create($vars, &$errors, $origin, $autorespond=true, $alertstaff=true) {
-        global $cfg,$thisclient,$_FILES;
+        global $ost, $cfg, $thisclient, $_FILES;
 
         //Check for 403
         if ($vars['email']  && Validator::is_email($vars['email'])) {
@@ -1811,7 +1811,7 @@ class Ticket{
             //Make sure the email address is not banned
             if(EmailFilter::isBanned($vars['email'])) {
                 $errors['err']='Ticket denied. Error #403';
-                Sys::log(LOG_WARNING,'Ticket denied','Banned email - '.$vars['email']);
+                $ost->logWarning('Ticket denied', 'Banned email - '.$vars['email']);
                 return 0;
             }
 
@@ -1822,8 +1822,9 @@ class Ticket{
                     && ($openTickets>=$cfg->getMaxOpenTickets()) ) {
 
                 $errors['err']="You've reached the maximum open tickets allowed.";
-                Sys::log(LOG_WARNING, 'Ticket denied -'.$vars['email'], 
-                        sprintf('Max open tickets (%d) reached for %s ', $cfg->getMaxOpenTickets(), $vars['email']));
+                $ost->logWarning('Ticket denied -'.$vars['email'], 
+                        sprintf('Max open tickets (%d) reached for %s ', 
+                            $cfg->getMaxOpenTickets(), $vars['email']));
 
                 return 0;
             }
@@ -1832,9 +1833,10 @@ class Ticket{
         if (($email_filter=new EmailFilter($vars))
                 && ($filter=$email_filter->shouldReject())) {
             $errors['err']='Ticket denied. Error #403';
-            Sys::log(LOG_WARNING,'Ticket denied',
-                sprintf('Banned email - %s by filter "%s"', $vars['email'],
-                    $filter->getName()));
+            $ost->logWarning('Ticket denied', 
+                    sprintf('Banned email - %s by filter "%s"', 
+                        $vars['email'], $filter->getName()));
+
             return 0;
         }
 
diff --git a/include/mysql.php b/include/mysql.php
index 3f8729393977417db9d0f519068e013545eb05ce..d1d6863d87c6ced4090eb1389d051e223c5a3c8b 100644
--- a/include/mysql.php
+++ b/include/mysql.php
@@ -78,18 +78,18 @@
     }
    
 	// execute sql query
-	function db_query($query, $database="",$conn=""){
-        global $cfg;
+	function db_query($query, $database="", $conn=""){
+        global $ost;
        
 		if($conn) { /* connection is provided*/
-            $result = ($database)?mysql_db_query($database,$query,$conn):mysql_query($query,$conn);
+            $result = ($database)?mysql_db_query($database, $query, $conn):mysql_query($query, $conn);
    	    } else {
-            $result = ($database)?mysql_db_query($database,$query):mysql_query($query);
+            $result = ($database)?mysql_db_query($database, $query):mysql_query($query);
    	    }
                 
-        if(!$result) { //error reporting
+        if(!$result && $ost) { //error reporting
             $alert='['.$query.']'."\n\n".db_error();
-            Sys::log(LOG_ALERT,'DB Error #'.db_errno(),$alert,($cfg && $cfg->alertONSQLError()));
+            $ost->logError('DB Error #'.db_errno(), $alert, ($ost->alertONSQLError()));
             //echo $alert; #uncomment during debuging or dev.
         }
 
diff --git a/include/staff/attachment.inc.php b/include/staff/attachment.inc.php
index 5951b87c0b0788767b34c98d1a7290a7c1debcdd..6027678123ca55684c721ae72f98133135f603f7 100644
--- a/include/staff/attachment.inc.php
+++ b/include/staff/attachment.inc.php
@@ -1,7 +1,7 @@
 <?php
 if(!defined('OSTADMININC') || !$thisstaff->isAdmin()) die('Access Denied');
 //Get the config info.
-$config=($errors && $_POST)?Format::input($_POST):$cfg->getConfig();
+$config=($errors && $_POST)?Format::input($_POST):$cfg->getConfigInfo();
 ?>
 <table width="100%" border="0" cellspacing=0 cellpadding=0>
     <form action="admin.php?t=attach" method="post">
diff --git a/include/staff/preference.inc.php b/include/staff/preference.inc.php
index 054d592a7555f8d16f436f9cc5c9c66a91b6f27b..6eb27354b0d4cd019964b460b58a3c4b0db1110e 100644
--- a/include/staff/preference.inc.php
+++ b/include/staff/preference.inc.php
@@ -2,7 +2,7 @@
 if(!defined('OSTADMININC') || !$thisstaff->isAdmin()) die('Access Denied');
 
 //Get the config info.
-$config=($errors && $_POST)?Format::input($_POST):Format::htmlchars($cfg->getConfig());
+$config=($errors && $_POST)?Format::input($_POST):Format::htmlchars($cfg->getConfigInfo());
 //Basic checks for warnings...
 $warn=array();
 if($config['allow_attachments'] && !$config['upload_dir']) {
diff --git a/login.php b/login.php
index a1fb02e5ea75175c9956b46f140384e6681622da..823c48a030d494f2b6ae4f06bbbcf35c8de8918d 100644
--- a/login.php
+++ b/login.php
@@ -56,7 +56,7 @@ if($_POST && (!empty($_POST['lemail']) && !empty($_POST['lticket']))):
             $_SESSION['TZ_DST']=$cfg->observeDaylightSaving();
             //Log login info...
             $msg=sprintf("%s/%s logged in [%s]",$ticket->getEmail(),$ticket->getExtId(),$_SERVER['REMOTE_ADDR']);
-            Sys::log(LOG_DEBUG,'User login',$msg);
+            $ost->logDebug('User login', $msg);
             //Redirect tickets.php
             session_write_close();
             session_regenerate_id();
@@ -75,11 +75,11 @@ if($_POST && (!empty($_POST['lemail']) && !empty($_POST['lticket']))):
                 'Email: '.$_POST['lemail']."\n".'Ticket#: '.$_POST['lticket']."\n".
                 'IP: '.$_SERVER['REMOTE_ADDR']."\n".'Time:'.date('M j, Y, g:i a T')."\n\n".
                 'Attempts #'.$_SESSION['_client']['strikes'];
-        Sys::log(LOG_ALERT,'Excessive login attempts (client)',$alert,($cfg->alertONLoginError()));
+        $ost->logError('Excessive login attempts (client)', $alert, ($cfg->alertONLoginError()));
     }elseif($_SESSION['_client']['strikes']%2==0){ //Log every other failed login attempt as a warning.
         $alert='Email: '.$_POST['lemail']."\n".'Ticket #: '.$_POST['lticket']."\n".'IP: '.$_SERVER['REMOTE_ADDR'].
                "\n".'TIME: '.date('M j, Y, g:i a T')."\n\n".'Attempts #'.$_SESSION['_client']['strikes'];
-        Sys::log(LOG_WARNING,'Failed login attempt (client)',$alert);
+        $ost->logWarning('Failed login attempt (client)', $alert);
     }
 endif;
 
diff --git a/main.inc.php b/main.inc.php
index c5da45a3a8c2de0d69d4ce5e15bf93a2a9628484..a84e9705c53ea8162b689926745ddb92a6ad92db 100644
--- a/main.inc.php
+++ b/main.inc.php
@@ -159,7 +159,7 @@
     $ferror=null;
     if (!db_connect(DBHOST,DBUSER,DBPASS) || !db_select_database(DBNAME)) {
         $ferror='Unable to connect to the database';
-    } elseif(!($ost=osTicket::start(1))) {
+    } elseif(!($ost=osTicket::start(1)) || !($cfg = $ost->getConfig())) {
         $ferror='Unable to load config info from DB. Get tech support.';
     }
 
@@ -173,12 +173,11 @@
     }
     
     //Init
-    $cfg = $ost;
     $session = $ost->getSession();
 
     //System defaults we might want to make global//
     #pagenation default - user can overwrite it!
-    define('DEFAULT_PAGE_LIMIT', $ost->getPageSize()?$ost->getPageSize():25);
+    define('DEFAULT_PAGE_LIMIT', $cfg->getPageSize()?$cfg->getPageSize():25);
 
     #Cleanup magic quotes crap.
     if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
diff --git a/scp/admin.inc.php b/scp/admin.inc.php
index 5f6f5e7633422251ca7bbf8960f69461a8afbc35..89e234e2f13e14204701348fa2222ae195930ea2 100644
--- a/scp/admin.inc.php
+++ b/scp/admin.inc.php
@@ -15,16 +15,16 @@
 **********************************************************************/
 require('staff.inc.php');
 //Make sure config is loaded and the staff is set and of admin type
-if(!$cfg or !$thisstaff or !$thisstaff->isAdmin()){
+if(!$ost or !$thisstaff or !$thisstaff->isAdmin()){
     header('Location: index.php');
     require('index.php'); // just in case!
     exit;
 }
 
 //Some security related warnings - bitch until fixed!!! :)
-if($cfg->isUpgradePending()) {
+if($ost->isUpgradePending()) {
     $errors['err']=$sysnotice='System upgrade is pending <a href="../setup/upgrade.php">Upgrade Now</a>';
-} elseif(!$cfg->isHelpDeskOffline()) {
+} else {
     
     if(file_exists('../setup/')) {
         $sysnotice='Please take a minute to delete <strong>setup/install</strong> directory (../setup/) for security reasons.';
diff --git a/scp/autocron.php b/scp/autocron.php
index 589ea416e85d0ef5524d1bd8d9f28ce590bce0ef..366351c9defedffd2bccd478b1d3c8bd2e349ba4 100644
--- a/scp/autocron.php
+++ b/scp/autocron.php
@@ -35,8 +35,9 @@ require_once(INCLUDE_DIR.'class.cron.php');
 Cron::TicketMonitor(); //Age tickets: We're going to age tickets ever regardless of cron settings. 
 if($cfg && $cfg->enableAutoCron()){ //ONLY fetch tickets if autocron is enabled!
     Cron::MailFetcher();  //Fetch mail.
-    Sys::log(LOG_DEBUG,'Autocron','cron job executed ['.$thisstaff->getUserName().']');
-}    
+    $ost->logDebug('Autocron', 'Cron job executed ['.$thisstaff->getUserName().']');
+} 
+
 $_SESSION['lastcroncall']=time();
 endif;
 $output = ob_get_contents();
diff --git a/scp/logout.php b/scp/logout.php
index e02e4be1609d387d43b3e59d1693a291d80677cb..32d62d14abb29363df9a7da033a1f0873821cbc9 100644
--- a/scp/logout.php
+++ b/scp/logout.php
@@ -15,7 +15,9 @@
     vim: expandtab sw=4 ts=4 sts=4:
 **********************************************************************/
 require('staff.inc.php');
-Sys::log(LOG_DEBUG,'Staff logout',sprintf("%s logged out [%s]",$thisstaff->getUserName(),$_SERVER['REMOTE_ADDR'])); //Debug.
+$ost->logDebug('Staff logout',
+        sprintf("%s logged out [%s]", 
+            $thisstaff->getUserName(), $_SERVER['REMOTE_ADDR'])); //Debug.
 $_SESSION['_staff']=array();
 session_unset();
 session_destroy();
diff --git a/scp/settings.php b/scp/settings.php
index d7809d63751039c61639efd448c5718a888cb7ac..9058fe42ca52c4f9b428bbc52f2ed2cb61f80a8a 100644
--- a/scp/settings.php
+++ b/scp/settings.php
@@ -57,7 +57,7 @@ require(STAFFINC_DIR.'header.inc.php');
     </form>
 </div>
 <?php
-$config=($errors && $_POST)?Format::input($_POST):Format::htmlchars($cfg->getConfig());
+$config=($errors && $_POST)?Format::input($_POST):Format::htmlchars($cfg->getConfigInfo());
 include_once(STAFFINC_DIR."settings-$target.inc.php");
 include_once(STAFFINC_DIR.'footer.inc.php');
 ?>
diff --git a/scp/staff.inc.php b/scp/staff.inc.php
index 0256ce704649ecf10a7695d951b8624c6b60d72e..a28cf1d63a288ad39697527bd10c7d4fbbd28611 100644
--- a/scp/staff.inc.php
+++ b/scp/staff.inc.php
@@ -71,7 +71,7 @@ if(!$thisstaff->isAdmin()) {
     }
 
     //Staff are not allowed to login in offline mode!!
-    if($ost->isHelpDeskOffline() || $ost->isUpgradePending()) {
+    if(!$ost->isSystemOffline() || $ost->isUpgradePending()) {
         staffLoginPage('System Offline');
         exit;
     }
@@ -94,7 +94,7 @@ $tabs=array();
 $submenu=array();
 if($ost->isUpgradePending()) {
     $errors['err']=$sysnotice='System upgrade is pending <a href="../setup/upgrade.php">Upgrade Now</a>';
-} elseif($ost->isHelpDeskOffline()) {
+} elseif($cfg->isHelpDeskOffline()) {
     $sysnotice='<strong>System is set to offline mode</strong> - Client interface is disabled and ONLY admins can access staff control panel.';
     $sysnotice.=' <a href="settings.php">Enable</a>.';
 }
diff --git a/scp/tickets.php b/scp/tickets.php
index bd5bebac2abe359de5c2a89b62945abbe599fc46..03b95b3f71e8d8c972a40f036007173adc565d79 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -483,8 +483,6 @@ if($ticket) {
     if($_REQUEST['a']=='search' && !$_REQUEST['status'])
         $nav->setActiveSubMenu(-1);
 
-    //$ost->addExtraHeader('<meta http-equiv="refresh" content="'.$min*60.'" />');
-
     //set refresh rate if the user has it configured
     if(!$_POST && $_REQUEST['a']!='search'  && ($min=$thisstaff->getRefreshRate()))
         $ost->addExtraHeader('<meta http-equiv="refresh" content="'.($min*60).'" />');
diff --git a/setup/inc/class.upgrader.php b/setup/inc/class.upgrader.php
index 73af7e6066cddf41140d7bd6f2c2618431dfe83f..891d472d9264a78501bac8ec6d7a4d28abf8553c 100644
--- a/setup/inc/class.upgrader.php
+++ b/setup/inc/class.upgrader.php
@@ -50,8 +50,9 @@ class Upgrader extends SetupWizard {
     }
 
     function onError($error) {
+        global $ost;
 
-        Sys::log(LOG_ERR, 'Upgrader Error', $error);
+        $ost->logError('Upgrader Error', $error);
         $this->setError($error);
         $this->setState('aborted');
     }
@@ -191,6 +192,7 @@ class Upgrader extends SetupWizard {
     }
     
     function upgrade() {
+        global $ost;
 
         if($this->getPendingTasks() || !($patches=$this->getPatches()))
             return false;
@@ -209,7 +211,7 @@ class Upgrader extends SetupWizard {
             if(($info = $this->readPatchInfo($patch)) && $info['version'])
                 $logMsg.= ' ('.$info['version'].') ';
 
-            Sys::log(LOG_DEBUG, 'Upgrader - Patch applied', $logMsg);
+            $ost->logDebug('Upgrader - Patch applied', $logMsg);
             
             //Check if the said patch has scripted tasks
             if(!($tasks=$this->getTasksForPatch($phash)))
diff --git a/setup/p.php b/setup/p.php
index babeebb866f198e7fc78516a34133164d72a9b47..51c7055f257559099fd600ef12c31e882605873d 100644
--- a/setup/p.php
+++ b/setup/p.php
@@ -41,19 +41,19 @@ if(!$_SESSION['ost_upgrader'][$upgrader->getShash()]['progress']) {
 }
 
 if($upgrader->getNumPendingTasks()) {
-    if($upgrader->doTasks() && !$upgrader->getNumPendingTasks() && $cfg->isUpgradePending()) {
+    if($upgrader->doTasks() && !$upgrader->getNumPendingTasks() && $ost->isUpgradePending()) {
         //Just reporting done...with tasks - break in between patches!
         header("HTTP/1.1 304 Not Modified");
         exit;
     }
-} elseif($cfg->isUpgradePending() && $upgrader->isUpgradable()) {
+} elseif($ost->isUpgradePending() && $upgrader->isUpgradable()) {
     $version = $upgrader->getNextVersion();
     if($upgrader->upgrade()) {
         //We're simply reporting progress here - call back will report next action'
         Http::response(200, "Upgraded to $version ... post-upgrade checks!");
         exit;
     }
-} elseif(!$cfg->isUpgradePending()) {
+} elseif(!$ost->isUpgradePending()) {
     $upgrader->setState('done');
     session_write_close();
     header("HTTP/1.1 304 Not Modified");
diff --git a/setup/upgrade.php b/setup/upgrade.php
index 0406383707cfe245fd11aae9323ee1422d6d679e..e5fd21084ccb534167d681ee6288793d5a683296 100644
--- a/setup/upgrade.php
+++ b/setup/upgrade.php
@@ -48,7 +48,7 @@ if($_POST && $_POST['s'] && !$upgrader->isAborted()) {
     switch(strtolower($_POST['s'])) {
         case 'prereq':
             //XXX: check if it's upgradable version??
-            if(!$cfg->isUpgradePending())
+            if(!$ost->isUpgradePending())
                 $errors['err']=' Nothing to do! System already upgraded to the current version';
             elseif(!$upgrader->isUpgradable())
                 $errors['err']='The upgrader does NOT support upgrading from the current vesion!';
@@ -60,9 +60,9 @@ if($_POST && $_POST['s'] && !$upgrader->isAborted()) {
         case 'upgrade': //Manual upgrade.... when JS (ajax) is not supported.
             if($upgrader->getNumPendingTasks()) {
                 $upgrader->doTasks();
-            } elseif($cfg->isUpgradePending() && $upgrader->isUpgradable()) {
+            } elseif($ost->isUpgradePending() && $upgrader->isUpgradable()) {
                 $upgrader->upgrade();
-            } elseif(!$cfg->isUpgradePending()) {
+            } elseif(!$ost->isUpgradePending()) {
                 $upgrader->setState('done');
             }
 
@@ -89,7 +89,7 @@ switch(strtolower($upgrader->getState())) {
         $inc='upgrade-prereq.inc.php';
         if($upgrader->isAborted())
             $inc='upgrade-aborted.inc.php';
-        elseif(!$cfg->isUpgradePending())
+        elseif(!$ost->isUpgradePending())
             $errors['err']='Nothing to do! System already upgraded to the latest version';
         elseif(!$upgrader->isUpgradable())
             $errors['err']='The upgrader does NOT support upgrading from the current vesion!';